我的问题是如何在不经过每个关联的情况下删除反面的实体并手动删除它。
<?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
,我希望地址只有一个用户。
这样做的最佳方式是什么?
答案 0 :(得分:2)
我希望它有所帮助。 只需将级联添加到反面实体。
/** @Entity */
class User
{
// ...
/**
* @OneToMany(targetEntity="Address", mappedBy="user", cascade={"persist", "remove"})
*/
private $addresses;
// ...
public function __construct() {
$this->addresses = new ArrayCollection();
}
/*
* @return ArrayCollection
*/
public function getAddresses (){
return $this->addresses:
}
/*
* @pram Address $address
*/
public function setAddresses (Address $address){
$this->addresses->add ($address);
}
}
答案 1 :(得分:0)
我没有足够的声誉来评论所以我会在这里给我2美分:
添加到@Max P.的评论:
@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
您可以在此处找到更详细的答案:https://stackoverflow.com/a/6334710/4374331
希望这有帮助!