[php] Doctrine 2 및 추가 필드가있는 다 대다 링크 테이블


0 Answers

Doctrine은 다 대 다 관계를 잘 처리합니다.

당신이 가지고있는 문제는 협회가 "여분의"데이터를 가질 수 없기 때문에 간단한 ManyToMany 연관이 필요 없다는 것입니다.

중간 (stock) 테이블은 product_id 및 store_id 이상을 포함하고 있으므로 추가 데이터를 모델링하기 위해 자체 엔티티가 필요합니다.

그래서 당신은 정말로 엔티티의 세 클래스를 원합니다.

  • 생성물
  • 스톡 레벨
  • 저장

두 협회 :

  • 제품 oneToMany StockLevel
  • 상점 oneToMany StockLevel
Question

(나의 일관성없는 질문에 대해 유감스럽게 생각한다 : 나는이 글을 쓰면서 몇 가지 질문에 답하려고 노력했지만, 여기있다 :)

링크 테이블 내부에 다 대다 관계가있는 데이터베이스 모델을 만들려고하지만 링크 당 값 (이 경우에는 재고 보관 테이블)도 있습니다. (이것은 내가 겪고있는 더 많은 문제에 대한 기본적인 예이지만, 계속하기 전에이 문제를 테스트 할 것이라고 생각했습니다.)

이 간단한 예제를 위해 exportmwb 를 사용하여 두 개의 Entities Store와 Product를 생성했습니다. 둘 다 아래에 표시됩니다.

그러나 문제는 Doctrine을 사용하여 stock.amount 값 (음수가 될 수 있으므로 signed int에 액세스하는 방법)을 파악할 수 없다는 것입니다. 또한, doctrine의 orm을 사용하여 테이블을 만들려고 할 때 : schema-tool : create function

이로 인해 다 대일 관계는 엔티티 자체가 아니므로 두 개의 엔티티와 세 개의 테이블 (값이없는 링크 테이블과 두 개의 데이터 테이블)이 생성되었으므로 엔티티로만 제품과 저장소를 가질 수 있습니다.

따라서 논리적으로 저장소와 제품에 대한 관계가있는 별도의 테이블로 재고를 갖도록 데이터베이스 모델을 변경하려고 시도했습니다. 나는 또한 필드 이름을 문제의 근원지로 제외 할 수 있도록 다시 작성했다.

그럼 내가 찾은 것은 여전히 ​​Stock 엔티티를 얻지 못했고 데이터베이스 자체에 'amount'필드가 없다는 것입니다.

나는이 저장소와 제품을 주식 테이블 (다른 것들)과 함께 묶을 수 있어야했습니다 ... 그래서 제품 자체에 재고를 추가하는 것은 옵션이 아닙니다.

root@hdev:/var/www/test/library# php doctrine.php orm:info
Found 2 mapped entities:
[OK]   Entity\Product
[OK]   Entity\Store

그리고 데이터베이스를 만들 때 여전히 저에게 주식 테이블의 오른쪽 필드를주지 않습니다 :

그래서 여기에서 몇 가지를 들자면, many-to-many 연결은 엔티티가 아니며 값을 가질 수 없다는 것을 알게되었습니다. 그래서 나는 그것을 다른 사람들과의 관계를 가진 별도의 테이블로 변경하려고 시도했지만 여전히 효과가 없었습니다.

여기서 내가 뭘 잘못하고 있니?






Related