删除Symfony4 / Doctrine时的外键和级联问题

问题描述 投票:0回答:1

我想删除我的用户的属性,但我有以下错误:

执行'DELETE FROM属性WHERE id =?'时发生异常用params [1]:

SQLSTATE [23000]:完整性约束违规:1451无法删除或更新父行:外键约束失败(gestImmo.equipment,CONSTRAINT FK_D338D583517FE9FE FOREIGN KEY(equipment_id)REFERENCES propertyid))

我用谷歌搜索它(我认为)这是一个级联问题。所以我在论坛上搜索,但我没有解决问题。我向一位经验丰富的同事求助,但我们没有解决这个错误......希望你能帮助我。

在我的用户实体中有:

     /**
     * @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;

谢谢你的帮助 !

php symfony doctrine-orm cascade
1个回答
1
投票

您无法删除属性,因为它在表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;
© www.soinside.com 2019 - 2024. All rights reserved.