Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 26.08.2017 18:50:34

Каскадное удаление средствами Laravel

Есть 4 таблицы

 
1. Categories (id, slug) 
->hasMany(category_langs)
->hasMany(articles)

2. Category_langs (id, category_id, lang_id, title)
->belongsTo(categories)

3. Articles (id, category_id, image, slug)
->belongsTo(categories)
->hasMany(article_langs)

4. Article_langs (id, article_id, lang_id, title, content)
->belongsTo(articles)

Задача -> при удалении категорий удалить article->langs(), articles(), category_langs(), category. при этом еще сделать грамотный unlink для изображений в articles.

Как это можно сделать при таком раскладе, или как поменять реляции что бы воплотить данный функционал ТОЛЬКО средствами Laravel, без создания реляций по ключу в самой ДБ !? Заранее спасибо !

Изменено MeKree (26.08.2017 18:51:28)

Не в сети

#2 26.08.2017 19:38:49

Re: Каскадное удаление средствами Laravel

на событиях модели наверное. но тогда есть смысл всегда заворачивать удаление в транзакции. иначе если что-то пойдёт не так на полпути, база окажется в несогласованном состоянии. при использовании foreign key транзакционная семантика на on delete cascade гарантируется самой базой

Не в сети

#3 27.08.2017 00:19:52

Re: Каскадное удаление средствами Laravel

Спасибо большое за ответ. Все таки для решения данной задачи решил использовать foreign.

Не в сети

#4 27.08.2017 14:19:23

Re: Каскадное удаление средствами Laravel

Все таки для решения данной задачи решил использовать foreign.

И это самое лучшее решение. Если есть возможность переложить работу с PHP-кода на БД, то это всегда нужно делать, так как это проще и надежнее.

Для тех, кто не понял: речь идет о добавлении внешнего ключа с каскадным удалением:

ALTER TABLE `t` ADD CONSTRAINT `c` FOREIGN KEY (`k`) REFERENCES `t2` (`k`) ON DELETE CASCADE ON UPDATE CASCADE;

Не в сети

#5 27.08.2017 15:54:50

Re: Каскадное удаление средствами Laravel

И это самое лучшее решение. Если есть возможность переложить работу с PHP-кода на БД, то это всегда нужно делать, так как это проще и надежнее.

Почитав документации, пришел к такому же выводу. Спасибо ещё раз.

Не в сети

Подвал раздела