我有2个具有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>
我的用户实体:
protected $addresses;
public function addAddress(UserAddress $address)
{
$this->addresses[] = $address;
return $this;
}
public function removeAddress(UserAddress $address)
{
$this->addresses->removeElement($address);
}
public function getAddresses()
{
return $this->addresses;
}
public function __construct()
{
$this->addresses = new ArrayCollection();
}
当我尝试通过 $ user-&gt; removeAddress($ address)从用户地址集合中删除地址时,请重新检查$ addresses数组并删除该地址。但在数据库中它仍然存在。我希望删除数据库中的2个字段,一个在UserAddress表中,一个在Address中。我怎么能这样做?
答案 0 :(得分:0)
$user->removeAddress($address)
仅从ArrayCollection中删除元素。
从ArrayCollection中删除后,您必须在EntityManager中保留您的实体,然后刷新您的EntityManager。然后,您可以在数据库中看到一些更改。
在该操作之后,您可以看到已删除UserAddress表中的记录。要从地址中删除记录,您必须使用级联ORM规则声明链接到地址表的foreign_key。您制作一个级联规则(用户 - >用户地址)但现在您还需要一个(用户地址 - &gt;地址)
答案 1 :(得分:0)
您可以在UserAddress类中的字段上定义级联:
/** @OneToMany(targetEntity="Address", mappedBy="address", cascade={"remove"}) */
protected $addresses;
有关详细信息,请参阅this。