我有一个实体学生,其中有分配的主题。不幸的是,这些映射是奇怪的,我现在不允许改变它,但是作业知道它们属于哪个主题,主题知道它们属于哪个学生,而不是相反。学生不知道它的主题,它的主题不知道它的任务。更多我有onDelete = CASCADE“,所以默认情况下,学生将被删除与他的科目与他的任务。这工作正常。使用preRemove删除entiry之前执行检查
我想创建一个检查,如果学生有一个主题,学生不能删除,也没有问题。
如果没有开放的问题,我想删除的学生,主题和任务。
我如何执行呢?我想,我已经有一个这样的骨干;
public function preRemove(LifecycleEventArgs $args)
{
$em = $args->getEntityManager();
$student = $args->getEntity();
if ($student instanceof Student) {
$subjects = $em->getRepository(Subject::class)->findBy(['student' => $student]);
foreach ($subjects as $subject) {
if ($subject instanceof Subject) {
$assignments = $em->getRepository(Assignment::class)->findBy(['subject' => $subjects]);
foreach ($assignments as $assignment) {
if ($assignment->isCompleted()) {
echo $assignment." - CAN DELETE<br>";
} else {
echo $assignment." - CAN'T DELETE, THERE ARE OPEN ASSIGNMENTS!<br>";
}
}
}
}
}
}
什么将现在正确的方式去?只需返回true或false来停止或继续操作?或者我需要再次执行特定的学说,比如删除等。我不是100%确定下一步该做什么。
如果分配不能被删除,我还需要创建自定义异常。
任何人都可以请帮忙吗?我会很感激。