原则onDelete关系设置为NULL并设置其他字段

时间:2020-07-16 16:29:40

标签: php doctrine-orm

如何在删除教师后将$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;
}

1 个答案:

答案 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();
    }
}
相关问题