如何在删除教师后将$isSuspended
设置为true
?
<?php
class Teacher {
/**
*@ORM\OneToMany(targetEntity="Activities", mappedBy="teacher")
*/
protected $activities;
}
class Activities {
/**
* @ORM\ManyToOne(targetEntity="Teacher", inversedBy="activities")
* @ORM\JoinColumn(name="teacher_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
protected $teacher;
/**
* Activities are suspended when there is not teacher
*/
protected $isSuspended = false;
}
答案 0 :(得分:1)
这部分onDelete="SET NULL"
在数据库级别工作,因此,为了更改$isSuspended
字段,您可以为postRemove
学说事件创建一个侦听器。
use Doctrine\ORM\Event\LifecycleEventArgs;
public function postRemove(LifecycleEventArgs $event)
{
$entity = $event->getEntity();
if ($entity instanceof Teacher) {
foreach($entity->getActivities() as $activity) {
$activity->setIsSuspended(true);
$event->getEntityManager()->persist($activity);
}
$event->getEntityManager()->flush();
}
}