我有一個實體學生,其中有分配的主題。不幸的是,這些映射是奇怪的,我現在不允許改變它,但是作業知道它們屬於哪個主題,主題知道它們屬於哪個學生,而不是相反。學生不知道它的主題,它的主題不知道它的任務。更多我有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%確定下一步該做什麼。
如果分配不能被刪除,我還需要創建自定義異常。
任何人都可以請幫忙嗎?我會很感激。