2012-02-07 3 views
6

어셈블리와 ComponentSlot의 관계가 있습니다. OneToMany 관계입니다.Doctrine/Symfony2 OneToMany foreign_id를 NULL로 저장 중

// Assembly 

/** 
* @ORM\OneToMany(targetEntity="ComponentSlot", mappedBy="assembly", cascade={"persist"}) 
* @Assert\Valid 
*/ 
protected $componentSlots; 

// ComponentSlot 

/** 
* @ORM\ManyToOne(targetEntity="Assembly", inversedBy="componentSlots") 
*/ 
protected $assembly; 

데이터베이스에서 생성 한 스키마는 절대적으로 좋습니다. 열을 수정하고 색인과 관계를 수정하십시오.

Symfony2 형식 AssemblyType에는 ComponentSlotType 컬렉션이 있습니다. 여러 ComponentSlot 하위를 추가 할 수 있습니다. 지속성에서 Assembly 및 ComponentSlot 하위 모두는 구성 요소 슬롯 테이블에서 assembly_id가 NULL 인 경우를 제외하고는 모두 올바르게 저장됩니다.

관계를 잘 저장 한 이전 프로젝트에서 사용한 설정을 복사했습니다. 완전히 엉망입니다. 계단식 지속은 Assembly의 componentSlots 필드에 설정되고 OneToMany에 대한 나의 과거 경험은 특별한 조치를 취할 필요가 없다는 것입니다. 처리해야합니다.

모든 포인터를 부탁드립니다 :)

+0

어떻게 관계를 구축합니까? 어떤 방법을 부릅니까? – greg0ire

+0

제가 말했듯이, OneToMany 관계가 이미 동일한 방식으로 설정되어있는 프로젝트가 있습니다. 그 프로젝트에서 부모는'addLink (Link $ link)'를 가지고 있고'$ this-> link [] = $ link' 만 호출합니다. 실제로 http://symfony.com/doc/2.0/book/doctrine.html의 설명서는 부모 항목과 하위 모음 항목의 연결이 자동임을 확인합니다. 이것은 자동, 이전 프로젝트, 문서 및 사실 doctrine : generate : 엔티티가 자동 생성 add 메소드에서 관계를 설정하지 않아야합니다. 내 모델이 ok이고 다른 것이 awry가 될 것을 제안합니다. – PorridgeBear

+0

나는 거의 그걸 가지고 있다고 생각했습니다. 컬렉션 양식 필드의 by_reference가 false로 설정되지 않고 생략되었습니다. 이것은 아이들을 위해 저장된 ID를 변경하지 않았습니다. – PorridgeBear

답변

4

이전 설정을 확인하십시오. 당신이 뭔가있는 것 같아요 :

+0

아니요, 추가해도 아무 것도 변경되지 않습니다. 또한 symfony2가 request-> bindRequest에서 객체를 설정하기 위해 사용하는'setComponentSlots'에서이 작업을 시도했으나 작동하지 않습니다. – PorridgeBear