Doctrine symfony使用OneToMany删除实体 - ManyToOne关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Doctrine symfony使用OneToMany删除实体 - ManyToOne关系相关的知识,希望对你有一定的参考价值。

我有两个实体活动和BulleManager。我使用OneToMany - ManyToOne来表示它们之间的关系。问题是,当我删除BulleManager实体中的一行时,“活动”实体中的相关行也会被删除,这不是我喜欢的行为。我想在删除拥有方(BulleManager)实体时将“NULL”设置为反向边实体(Activities)。

class Activities
{
     /**
      * @ORMManyToOne(targetEntity="BulleManager", 
      cascade={"persist"}, inversedBy="activities")
     * @ORMJoinColumn(name="bulle_manager_id", 
     referencedColumnName="id", nullable=true, onDelete="SET NULL")
     */
     protected $bulleManager;
...
}

class BulleManager
{
    /**
     * @ORMOneToMany(targetEntity="Activities", 
     mappedBy="bulleManager", cascade={"remove"})
     */
    private $activities;
}

欢迎您的解决方案。

答案

只需从BulleManager实体中删除cascade={"remove"}即可。

如果在父表(BulleManager)中删除记录,cascade={"remove"}将删除子表(活动)中的所有依赖记录。

现在,如果删除BulleManager,它会在活动表中将bullemanager_id设置为NULL

并且,不要忘记使用以下命令更新数据库模式:

php bin/console doctrine:schema:update

以上是关于Doctrine symfony使用OneToMany删除实体 - ManyToOne关系的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5(Doctrine 2.9),Doctrine 不会为 ManyToOne 自引用关系生成迁移

如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射

Symfony2\Doctrine - 检索用户角色

Symfony 2 Doctrine 内存使用情况

Symfony - 使用Doctrine创建复杂查询

在 Symfony 中使用 Doctrine 的 DBAL 检索布尔值