我想删除我的用户的属性,但我有以下错误:
执行'DELETE FROM属性WHERE id =?'时发生异常用params [1]:
SQLSTATE [23000]:完整性约束违规:1451无法删除或更新父行:外键约束失败(gestImmo
.equipment
,CONSTRAINT FK_D338D583517FE9FE
FOREIGN KEY(equipment_id
)REFERENCES property
(id
))
我用谷歌搜索它(我认为)这是一个级联问题。所以我在论坛上搜索,但我没有解决问题。我向一位经验丰富的同事求助,但我们没有解决这个错误......希望你能帮助我。
在我的用户实体中有:
/**
* @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;
在我的设备实体中有:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Property", inversedBy="equipments")
* @Assert\Type("string")
* @var string
*/
private $equipment;
谢谢你的帮助 !
您无法删除属性,因为它在表equipment_id
中的equipment
列中引用。此外键约束意味着equipment.equipment_id
必须指向属性的有效(现有)id - property.id
。如果要删除属性,那么在此之前您要么:
equipment
记录,其中equipment_id
= {您要删除的属性的ID}equipment_id
更改为null编辑
看起来您的注释不正确。如果我理解你的关系正确,那么它应该是这样的。
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;