При удалении ошибка
des1roer opened this issue · comments
Caused by: PDOException
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (lesson
.worker_has_perk
, CONSTRAINT fk_worker_has_perk_worker1
FOREIGN KEY (worker_id
) REFERENCES worker
(id
) ON DELETE NO ACTION ON UPDATE NO ACTION)
Суть ошибки найдёшь в гугле. Решений несколько:
- удалить фк
- проверять перед удалением "а можно ли удалять"
- измерить в фк restrict на cascade
ну да. нужно было тип на каскад. но думал это предусмотрено
Предусмотрено где?
Тип ставится не от балды, а по требованиям бизнес логики.
Если там нужен restrict значит нужно делать доп проверки чтобы юзер не видел ошибки.
а как тогда это проверить можно?
Допустим у тебя связь - Order - OrderHasProduct - Product
-
Продукт не может быть удален, пока он используется в заказе (иначе нарушиться целостность заказа) и для этого надо поставить на fk OrderHasProduct -> Product тип restrict (при удалении продукта проверить, нет ли связей с заказом).
-
При удалении заказа нужно удалить все связи с продуктами. Ставим на fk Order - OrderHasProduct тип cascade (при удалении заказа удалить все связи с продуктами).
При такой схеме, если попытаться удалить продукт который есть в заказе - вылетит твоя ошибка. Чтобы юзеру показать что-то нормальное - проверь со сколькими заказами связан продукт перед удалением. Если больше 0, значит покажи красивое предупреждение и откажи в удалении.