当试图级联删除具有一对一和一对多双向关系的实体时,我收到了外部约束违规。 这是我的四个实体相关的这种方式:“用户”对象可能有零或一个“联系”。联系人可能有零个或一个“地址”和零个或多个“电话”。但是,“联系人”必须与“用户”实体以及“联系人”实体的“地址”和“电话”相关联。Doctrine 2 - 无法级联删除具有双向关系的实体
我的目标是,当我删除一个“用户”所有的子对象也被级联删除(“联系”,“地址”和“电话”)。但是,当我删除一个子对象时,我只是希望它的父实体中的引用ID被设置为NULL。
我试过几种方法,包括选项onDelete =“CASCADE”和onDelete = NULL,但我仍然得到了外部约束违规错误。
用户实体
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* Contact
*
* @ORM\OneToOne(targetEntity="Contact", mappedBy="user", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $contact;
...
}
联系实体
class Contact
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Address
*
* @ORM\OneToOne(targetEntity="Address", mappedBy="contact", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $address;
/**
* Telephones
*
* @ORM\OneToMany(targetEntity="Telephone", mappedBy="contact", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $telephones;
/**
* User
*
* @ORM\OneToOne(targetEntity="User", inversedBy="contact", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*/
private $user;
/**
* Constructeur
*/
public function __construct()
{
$this->telephones = new ArrayCollection();
}
...
}
地址实体
class Address
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Contact", inversedBy="address", cascade={"persist"})
* @ORM\JoinColumn(name="contact_id", referencedColumnName="id", nullable=false)
*/
private $contact;
...
}
电话实体
class Telephone
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Contact", inversedBy="telephones", cascade={"persist"})
* @ORM\JoinColumn(name="contact_id", referencedColumnName="id", nullable=false)
*/
private $contact;
...
}
什么是错误 – 2014-09-02 11:40:43
“无法删除或更新父行:外键约束失败('eds'.'eds_contact',CONSTRAINT'FK_E2314CF8FB88E14F' FOREIGN KEY('user_id')REFERENCES'eds_user'('id')) “ – Glesker 2014-09-02 12:24:51