【问题标题】:Doctrine cascaded entity clearing学说级联实体清算
【发布时间】:2014-04-02 17:13:57
【问题描述】:

我在清除学说中的实体时遇到以下问题:
我有两个实体连接在一起,可以说其中一个是主实体,另一个是属于主实体的子实体。然后,当我使用相应的存储库进行清除时,它只清除主实体但留下子实体。
刷新实体实际上工作正常,因为实体是通过级联连接的,所以当我刷新主实体时,子实体也被刷新。但是这种级联似乎不适用于清除。
有没有办法在不为子实体创建额外(实际上不需要其他东西)存储库的情况下也清除所有子实体和主要实体? 提前谢谢您。

编辑:好的,因为我似乎太不具体了,我的目标是清除学说中的实体,在数据库中删除它们。问题是,我有很多实体要处理,而学说并没有清除内存中的所有实体引用。那么有没有办法级联呢,还是我需要存储库呢?

最后编辑:问题已通过教义解决。查看已接受的答案!

【问题讨论】:

    标签: php symfony doctrine entity


    【解决方案1】:

    截至上次提交,问题已修复。现在级联清理对我来说就像一个魅力。 非常感谢教义的开发者!

    其他信息,请参见此处: https://github.com/doctrine/doctrine2/pull/995#issuecomment-40562699 https://github.com/doctrine/doctrine2/commit/1cd0b26a40dc22b0d11b1860eb058ab9cdc29f36

    【讨论】:

      【解决方案2】:

      您需要在主实体的映射信息中添加cascade={"remove"},以获取代表子实体的字段。

      【讨论】:

      • 感谢您的评论,但这并不能真正解决我的问题。有关更多信息,请参阅我的编辑。谢谢。
      【解决方案3】:

      您可以为每个主实体和子实体使用cascade={"remove"};它将删除内存中的子项,这可能会导致性能开销。
      如果您想依靠 DB 进行更快、更可靠的删除,您可以在删除事件 onDelete="CASCADE"
      上配置每一列 (但是您没有提供任何代码,但示例如下)

      /**
      * @ORM\OneToMany(targetEntity="SubEntity", mappedBy="mainEntity")
      */
      protected $subEntiy;
      

      在你拥有的另一个实体中

      /**
      * @ORM\ManyToOne(targetEntity="MainEntity", inversedBy="subEntity")
      * @ORM\JoinColumn(name="entity_id", referencedColumnName="id",  onDelete="CASCADE")
      */
      protected $mainEntity;
      

      【讨论】:

      • 感谢您的评论,但这并不能真正解决我的问题。有关更多信息,请参阅我的编辑。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      相关资源
      最近更新 更多