【发布时间】:2017-02-27 10:58:09
【问题描述】:
我的问题是如何在不经过每个关联的情况下删除反面的实体并手动删除它。
<?php
/** @Entity */
class User
{
// ...
/**
* @OneToMany(targetEntity="Address", mappedBy="user")
*/
private $addresses;
// ...
public function __construct() {
$this->addresses = new ArrayCollection();
}
}
/** @Entity */
class Address
{
// ...
/**
* @ManyToOne(targetEntity="User", inversedBy="features")
* @JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
// ...
}
在这个例子中,Address 是拥有方,所以我不能删除User,因为外键验证会失败。我必须删除Address,然后删除User。如果我有 10 个这样的关系,删除过程会很痛苦。
我可以创建ManyToMany 关系,但这样Address 实体将拥有users 而不是user,并且我希望地址只有一个用户。
最好的方法是什么?
【问题讨论】:
-
您可以使用选项
ondelete=cascade制作DB外键,这样DB会自动删除所有子项。 -
我应该把onDelete放在哪里?关于多对一关系?
标签: symfony doctrine-orm