学说级联实体清算

时间:2014-04-02 17:13:57

标签: php symfony doctrine entity clear

我在教条中清算实体存在以下问题:
我有两个连接在一起的实体,其中一个是主要实体,其中一个是属于主实体的子实体。然后,当我使用相应的存储库清除时,它只清除主实体但离开子实体。
刷新实体实际上工作正常,因为实体通过级联连接,所以当我冲洗主实体,子实体也被刷新。但这种级联似乎并没有明确的作用 有没有办法同时清除所有子实体和主要实体,而不为子实体创建额外的(实际上不需要其他东西)存储库? 提前谢谢。

编辑:好的,因为我看起来太不明确了,我的目标是清除学说中的实体,在数据库中删除它们。问题是,我有很多实体需要处理,而且学说并没有清除内存中的所有实体引用。那么是否有一种级联方法,或者我是否需要存储库?

最后编辑:问题已由学说修正。见接受的答案!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您需要将cascade={"remove"}添加到主实体中代表子实体的字段的映射信息中。

答案 2 :(得分:0)

您可以对每个主要实体和子实体使用cascade={"remove"};它将为记忆中的孩子进行移除,这可能会导致性能开销 如果您希望依赖数据库进行删除更快更可靠,则可以在删除事件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;