我有一个实体“AnnualReport”,它接受实体集合“AnnualReportStaffing”。年度报告有四个不同的人员配备部分,因此有四个这样的集合(ArrayCollection)。由于我不能使用传统的一对多关系,因此我必须使用带联接表的一对多,如此处所述。
因此,例如,我的 Staffing 集合之一在我的 AnnualReport 类中定义为:
/**
* @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;
现在,当需要删除AnnualReport 时,Doctrine 会删除报表和连接表内的Staffing 之间的关系,但不会删除关联的AnnualReportStaffing 实体。我尝试添加 cascade={"remove"},但我收到外键违规,因为它试图在删除连接表关联之前删除 Staffing 实体。
删除孤立的 Staffing 实体的最佳方法是什么?显然 orphanRemoval=true 不是答案。