我有一个拥有实体,与“属性”实体有以下关系:
/** * @ORM\OneToMany(targetEntity="Attribute",mappedBy="entity",cascade={"persist","remove","merge"}) **/ protected $attributes;
另一方面,国有实体关系如下所示:
/** * @ORM\ManyToOne(targetEntity="Entity",inversedBy="attributes") * @ORM\JoinColumn(name="entity_id",referencedColumnName="id") */ protected $entity;
当我创建实体的实例时,添加属性并保存它.一切正常
当我从实体中删除一个属性并保留时,该属性不会在数据库中删除,并在刷新时重新显示.
任何人都有想法?
解
原文链接:https://www.f2er.com/php/132134.html你要找的是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);
解决方案细节
但是,要自动执行此操作,我们使用孤立删除选项.我们只是简单地告诉原则,属性只能属于实体,如果属性不再属于一个实体,只需删除它:
/** * @ORM\OneToMany(targetEntity="Attribute",orphanRemoval=true,"merge"}) **/ protected $attributes;
$entity->getAttributes()->removeElement($attr);