當試圖級聯刪除具有一對一和一對多雙向關係的實體時,我收到了外部約束違規。 這是我的四個實體相關的這種方式:「用戶」對象可能有零或一個「聯繫」。聯繫人可能有零個或一個「地址」和零個或多個「電話」。但是,「聯繫人」必須與「用戶」實體以及「聯繫人」實體的「地址」和「電話」相關聯。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