Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть 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)
Не в сети
на событиях модели наверное. но тогда есть смысл всегда заворачивать удаление в транзакции. иначе если что-то пойдёт не так на полпути, база окажется в несогласованном состоянии. при использовании foreign key транзакционная семантика на on delete cascade гарантируется самой базой
Не в сети
Спасибо большое за ответ. Все таки для решения данной задачи решил использовать foreign.
Не в сети
Все таки для решения данной задачи решил использовать foreign.
И это самое лучшее решение. Если есть возможность переложить работу с PHP-кода на БД, то это всегда нужно делать, так как это проще и надежнее.
Для тех, кто не понял: речь идет о добавлении внешнего ключа с каскадным удалением:
ALTER TABLE `t` ADD CONSTRAINT `c` FOREIGN KEY (`k`) REFERENCES `t2` (`k`) ON DELETE CASCADE ON UPDATE CASCADE;
Не в сети
И это самое лучшее решение. Если есть возможность переложить работу с PHP-кода на БД, то это всегда нужно делать, так как это проще и надежнее.
Почитав документации, пришел к такому же выводу. Спасибо ещё раз.
Не в сети
Страницы 1