php – Doctrine 2实体关系删除
发布时间:2020-12-13 16:43:01 所属栏目:PHP教程 来源:网络整理
导读:我有一个拥有实体,与“属性”实体有以下关系: /*** @ORMOneToMany(targetEntity="Attribute",mappedBy="entity",cascade={"persist","remove","merge"})**/protected $attributes; 另一方面,国有实体关系如下所示: /*** @ORMManyToOne(targetEntity="Ent
我有一个拥有实体,与“属性”实体有以下关系:
/** * @ORMOneToMany(targetEntity="Attribute",mappedBy="entity",cascade={"persist","remove","merge"}) **/ protected $attributes; 另一方面,国有实体关系如下所示: /** * @ORMManyToOne(targetEntity="Entity",inversedBy="attributes") * @ORMJoinColumn(name="entity_id",referencedColumnName="id") */ protected $entity; 当我创建实体的实例时,添加属性并保存它.一切正常 任何人都有想法?
解
你要找的是orphan removal. 如果您想了解当前情况为何不起作用的细节,您可以阅读. 级联的困扰 级联操作不会做你想要的不幸. “cascade = [remove]”只是意味着如果实体对象被删除,那么doctrine将循环遍历并删除所有子属性: $em->remove($entity); // doctrine will basically do the following automatically foreach ($entity->getAttributes() as $attr) { $em->remove($attr); } 如何手动操作 如果您需要从实体中删除属性,那么您将删除属性: $entity->getAttributes()->removeElement($attr); $em->remove($attribute); 解决方案细节 但是,要自动执行此操作,我们使用孤立删除选项.我们只是简单地告诉原则,属性只能属于实体,如果属性不再属于一个实体,只需删除它: /** * @ORMOneToMany(targetEntity="Attribute",orphanRemoval=true,"merge"}) **/ protected $attributes; 然后,您可以通过简单地删除属性: $entity->getAttributes()->removeElement($attr); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |