在Symfony2中处理删除记录的最佳方法

时间:2014-02-12 16:39:27

标签: php symfony doctrine-orm foreign-keys

我有很多实体在Symfony2中有ManyToOne和OneToMany关联。众所周知,如果你删除一条记录并且它没有在其他表中的关联上设置空值,事情就会开始变得混乱。那么,当在Symfony2中删除记录时,Symfony2在其他表中将值设置为null的最佳方法是什么?

我需要在我的实体中设置什么以确保它在所有关联中持续存在。

1 个答案:

答案 0 :(得分:0)

首先,您可以使用 onDelete 属性为您的实体中的joinColumn注释手动设置FK的ON DELETE行为:

/**
 * @OneToOne(targetEntity="SomeEntity")
 * @JoinColumn(name="some_entity_id", referencedColumnName="id", onDelete="cascade")
 */
private $someEntity;

其次,您始终可以为实体删除事件实现事件侦听器。例如:

public function preRemove(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
    if (!$entity instanceof SomeEntity) {
        return;
    }

    // Here you can do whatever you want before
    // entity record is removed from the DB.
 }

您可以使用以下链接阅读有关学说事件系统的信息:

它们之间的区别在于第一种方法适用于数据库层。换句话说,即使您在控制台中使用原始SQL查询删除记录,它也会起作用。第二个更强大,因为您还可以在删除实体时运行任何PHP代码(例如,您可以发送电子邮件等)但如果通过原则删除记录,它将仅触发