Я хочу удалить свойство с моим пользователем, но у меня есть следующая ошибка:
Возникло исключение при выполнении «УДАЛИТЬ ИЗ свойства, ГДЕ id =?» с параметрами [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;
В моем свойстве Entity есть:
/**
* @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 должен указывать на действительный (существующий) идентификатор свойства — 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;
Установки onDelete = "CASCADE" в аннотации manyToOne должно быть достаточно.
Не забудьте bin/console make:migration после этого. Все, что вы изменяете в своем ОРМ, должно быть перенесено, чтобы применить изменения в базе данных.