私は課題を持つ科目を持っているエンティティスチューデントを持っています。残念なことにマッピングは奇妙で、私は今それを変更することは許されませんが、割り当ては彼らがどの科目に属しているかを知っており、科目は彼らが所属する学生を知っています。学生はその科目を知らず、その科目はその課題を知らない。さらに、私はonDelete = CASCADEを持っているので、デフォルトでは学生は割り当てられた科目で削除されてしまいます。学生は削除、また対象とすることはできません。preRemoveでエントリーを削除する前に確認してください
私は学生、件名、および割り当てを削除したい何のオープン対象が存在しない場合。
どのように私は私は私が既に持っていると思いますか?これを実行することができますこのようなバックボーン;
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を返すだけで、操作を停止または続行できますか?あるいは、私は特定のDoctrineを再び削除する必要がありますか?私は100%次のことを確実にしていません。
割り当てを削除できない場合は、カスタム例外を作成する必要があります。
誰でもお手伝いできますか?私はそれを多く感謝します。