0

我有 2 个具有 nn 关系的实体。参考实体有一些额外的字段,所以我必须像这样更改 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->removeAddress($address)从用户地址集合中删除地址时,重新检查 $addresses 数组并且该地址已被删除。但在数据库中它仍然存在。我希望删除数据库中的 2 个字段,一个在 UserAddress 表中,一个在 Address 中。我怎样才能做到这一点?

4

2 回答 2

0

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

/** @OneToMany(targetEntity="Address", mappedBy="address", cascade={"remove"}) */
protected $addresses;

欲了解更多信息,请阅读

于 2013-06-20T12:06:52.747 回答
0

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

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

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

于 2013-06-20T05:16:28.870 回答