我想与用户一起删除属性,但是出现以下错误:
执行“ DELETE FROM属性WHERE id =吗?”时发生异常。带有参数[1]:
SQLSTATE [23000]:违反完整性约束:1451无法删除或更新父行:外键约束失败(gestImmo
。equipment
,CONSTRAINT FK_D338D583517FE9FE
外键({{ 1}})参考文献equipment_id
(property
))
我用谷歌搜索,(我认为)这是一个级联问题。所以我在论坛上搜索,但没有解决问题。我向一个经过实验的同事寻求帮助,但我们没有解决错误……希望您能帮助我。
在我的用户实体中:
id
在我的实体Entity中:
/**
* @ORM\OneToMany(targetEntity="App\Entity\Property", mappedBy="userProperty")
*/
private $properties;
在我的设备实体中:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="properties")
* @JoinColumn(name="id", referencedColumnName="id", onDelete="CASCADE")
*/
private $userProperty;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Equipment", mappedBy="equipment")
* @JoinColumn(name="id", referencedColumnName="equipement_id", onDelete="CASCADE")
*/
private $equipments;
感谢您的帮助!
答案 0 :(得分:1)
您无法删除属性,因为在表equipment_id
的列equipment
中引用了该属性。此外键约束意味着equipment.equipment_id
必须指向属性property.id
的有效(现有)id。
如果要删除属性,则在此之前,您可以:
equipment
记录其中equipment_id
= {您要删除的属性的ID} equipment_id
更改为空编辑
看起来您的注释不正确。如果我正确理解了您的关系,那么应该是这样。
Property
实体:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="properties")
* @JoinColumn(name="user_property_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $userProperty;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Equipment", mappedBy="equipment")
*/
private $equipments;
Equipment
实体:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Property", inversedBy="equipments")
* @ORM\JoinColumn(name="equipment_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $equipment;
答案 1 :(得分:0)
在manyToOne批注中设置onDelete="CASCADE"
应该足够。
此后不要忘记bin/console make:migration
。您必须迁移在 ORM 中所做的所有更改,才能将更改应用到数据库中。