我有一个学生和课程实体,都在一个关于加入实体的OneToMany,StudentCourse。此联接添加了一个isCredited字段。
StudentCourse的引用实体正在级联删除(每当删除学生或课程时,与其关联的所有学生课程也会被删除)
/**
* @ORM\ManyToOne(targetEntity="Course", inversedBy="students", cascade={"persist","remove"})
* @ORM\JoinColumn(name="course_id", referencedColumnName="id", onDelete="CASCADE")
*/
$private course
我的问题是,每当我删除课程时,与其相关联的学生课程也会被级联操作删除,但每个StudentCourse都有一个preRemove生命周期回调,需要在删除之前调用。这没有发生,我需要它发生或者我将不得不重构所有内容以在每个实体的控制器中执行一堆逻辑。
这是未被调用的函数,但是因为它更新了学生所必需的。
/** @ORM\PreRemove */
public function preRemove()
{
//if students hours should be de-credited
if ($this->getIsCredited()) {
//find out what category we should credit them for, add that courses hours to students hours for that category
if ($this->getCourse()->getCategory() == 'Infrastructure') {
$this->getStudent()->setInfraHrs(
$this->getStudent()->getInfraHrs() - $this->getCourse()->getHours()
);
} else if ($this->getCourse()->getCategory() == 'Safety') {
$this->getStudent()->setSafetyHrs(
$this->getStudent()->getSafetyHrs() - $this->getCourse()->getHours()
);
} else if ($this->getCourse()->getCategory() == 'EDC') {
$this->getStudent()->setEdcHrs(
$this->getStudent()->getEdcHrs() - $this->getsCourse()->getHours()
);
}
}
}
我想通过迭代$this->getStudents()
从课程preRemove函数中执行此操作,但我需要来自实际联接的$isCredited
字段来查看每个StudentCourse是否被记入。所以这个想法是行不通的。