Symfony 使用附加字段删除多对多

Symfony 使用附加字段删除多对多,symfony,doctrine-orm,Symfony,Doctrine Orm,我有两个实体有n-n关系。引用实体有一些额外的字段,所以我必须像这样更改3个实体之间的关系 User --(1-n)-- UserAddress --(n-1)-- Address 在用户实体中,我有一个到UserAddress的映射: <one-to-many target-entity="UserAddress" mapped-by="user" field="addresses"> <cascade> <cascade-all/>

我有两个实体有n-n关系。引用实体有一些额外的字段,所以我必须像这样更改3个实体之间的关系

User --(1-n)-- UserAddress --(n-1)-- Address
在用户实体中,我有一个到UserAddress的映射:

<one-to-many target-entity="UserAddress" mapped-by="user" field="addresses">
   <cascade>
     <cascade-all/>
    </cascade>
</one-to-many>
/** @OneToMany(targetEntity="Address", mappedBy="address", cascade={"remove"}) */
protected $addresses;
当我试图通过$User->removeAddress($address)从用户地址集合中删除地址时,请重新检查$addresses数组,该地址已被删除。但在数据库中它仍然存在。我希望删除数据库中的2个字段,一个在UserAddress表中,一个在Address表中。如何才能做到这一点?

$user->removeAddress($address)
仅从ArrayCollection中删除元素

从ArrayCollection中删除后,必须在EntityManager中保留实体,然后刷新EntityManager。然后您可以看到数据库中的一些更改


在该操作之后,您可以看到UserAddress表中的记录已被删除。若要从地址中删除记录,必须使用级联ORM规则声明链接到地址表的外键。您创建了一个级联规则(User->UserAddress),但现在还需要一个(UserAddress->Address)

您可以在类UserAddress中的字段上定义级联:

<one-to-many target-entity="UserAddress" mapped-by="user" field="addresses">
   <cascade>
     <cascade-all/>
    </cascade>
</one-to-many>
/** @OneToMany(targetEntity="Address", mappedBy="address", cascade={"remove"}) */
protected $addresses;
有关更多信息,请阅读。

simple cascade={“remove”}对这两种方法都不够吗?