2016-06-02 5 views
1

엔티티 컬렉션 인 "AnnualReportStaffing"을 허용하는 엔티티 "AnnualReport"가 있습니다. 연례 보고서에는 4 가지 Staffing 섹션이 있으므로이 4 가지 컬렉션 (ArrayCollection)이 있습니다. 기존의 일대 다 관계를 사용할 수 없기 때문에 here과 같이 Join Table을 사용하여 일대 다수를 사용해야합니다.Symfony2와 Doctrine : 조인 테이블 고아 제거를 사용한 일대 다수

따라서, 예를 들어, 내 인력의 컬렉션 중 하나는 내 년차 클래스에서 같은 정의

: 그것이 년차를 삭제하는 시간을 때

/** 
* @ORM\ManyToMany(targetEntity="AnnualReportStaffing", cascade={"persist"}, orphanRemoval=true, fetch="LAZY") 
* @ORM\JoinTable(name="annualreports_staffingtenure", 
*  joinColumns={@ORM\JoinColumn(name="staffing_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="annualreport_id", referencedColumnName="id")}, 
*  ) 
*/ 
private $staffing; 

지금, 교리는 보고서와 인력 사이의 관계를 제거 조인 테이블 내부에 있지만 연관된 AnnualReportStaffing 엔티티는 제거되지 않습니다. 나는 cascade = { "remove"}를 추가하려고 시도했지만 join 테이블 연결이 삭제되기 전에 Staffing 엔티티를 제거하려고하기 때문에 외래 키 위반이 발생합니다.

고아 스태핑 엔티티를 제거하는 가장 좋은 방법은 무엇입니까? 분명히 orphanRemoval = true가 답이 아닙니다.

답변

0

이 같은 시도 할 수 있습니다 :

@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE") 
+0

보고서 열에 필요했지만 이는 고아 직원 구성 엔티티를 삭제할 때 차이가 없었습니다. – Ravioli87

1

솔루션이 더 이상 추적되도록 먼저 ORM에서 인력 엔티티를 분리하지해야한다는 것입니다. 분리 된 후에는 외래 키 위반없이 제거 될 수 있습니다. 또한 역 열은 보고서 자체를 제거하기 위해 onDelete = "CASCADE"를 설정해야했습니다. 나는 이것이 가장 안전하거나 가장 우아한 해결책이라는 것은 긍정적이지 않지만,이 특별한 경우에 효과가있는 것으로 보인다.

/** 
* @ORM\ManyToMany(targetEntity="AnnualReportStaffing", cascade={"persist", "detach", "remove"}, orphanRemoval=true, fetch="LAZY") 
* @ORM\JoinTable(name="annualreports_staffingtenure", 
*  joinColumns={@ORM\JoinColumn(name="annualreport_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="staffing_id", referencedColumnName="id", onDelete="CASCADE")}, 
*  ) 
*/