繁体   English   中英

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

[英]Best Way To Handle Removing Records in Symfony2

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

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

首先,您可以通过为实体中的joinColumn注释使用onDelete属性为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代码(例如,您可以发送电子邮件等),但是只有通过学说删除记录时才会触发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM