我在教条中清算实体存在以下问题:
我有两个连接在一起的实体,其中一个是主要实体,其中一个是属于主实体的子实体。然后,当我使用相应的存储库清除时,它只清除主实体但离开子实体。
刷新实体实际上工作正常,因为实体通过级联连接,所以当我冲洗主实体,子实体也被刷新。但这种级联似乎并没有明确的作用
有没有办法同时清除所有子实体和主要实体,而不为子实体创建额外的(实际上不需要其他东西)存储库?
提前谢谢。
编辑:好的,因为我看起来太不明确了,我的目标是清除学说中的实体,不在数据库中删除它们。问题是,我有很多实体需要处理,而且学说并没有清除内存中的所有实体引用。那么是否有一种级联方法,或者我是否需要存储库?
最后编辑:问题已由学说修正。见接受的答案!
答案 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;