Laravel по-русски

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

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

#1 24.04.2019 23:24:25

Как удалить относящиеся уведомления к посту, при его удалении?

Коробочный компонент уведомлений.

Когда комментишь статью, то приходят уведомления, и они помечаются прочитанными,
как сделать, что бы при удалении статьи, из таблицы удалялись эти уведомления?

Ведь в таблицу не записывается отдельный id статьи, а записывается всё в столбец data.

Может раширить таблицу уведомлений и добавить отдельный столбец id поста?

Или есть уже готовое решение?

Ведь взять все записи и перебрать каждую, потом искать есть ли в этом объекте id поста,
это будет слишком большая нагрузка и это не логично.

Не в сети

#2 25.04.2019 08:03:36

Re: Как удалить относящиеся уведомления к посту, при его удалении?

Должна быть отдельная таблица, например, comments. В ней делаешь столбец article_id, который связываешь со столбцом id таблицы articles. Если связь не сделал в миграции, то можно в phpMyAdmin.
В модели Article прописывешь отношение hasMany(), в модели Comment - belongsTo().
В методе destroy() контроллера статей перед удалением статьи вначале удаляешь комменты

Comment::where('article_id', $id)->delete();

Не в сети

#3 14.05.2019 01:00:03

Re: Как удалить относящиеся уведомления к посту, при его удалении?

Простите за оффтоп, но разве если у модели связи прописаны это всё равно не сработает и без указания ключей в миграции? Я думал раньше что эти связи в миграциях прописывают только для того чтобы облегчить поиск серверу

Не в сети

#4 14.05.2019 17:55:24

Re: Как удалить относящиеся уведомления к посту, при его удалении?

Простите за оффтоп, но разве если у модели связи прописаны это всё равно не сработает и без указания ключей в миграции? Я думал раньше что эти связи в миграциях прописывают только для того чтобы облегчить поиск серверу

Только если в миграции вы указали "->onDelete('cascade');". Если вкратце связи нужны для обеспечения целостности самих данных, оптимизации запросов со стороны бд и тд.

Это собственно и ответ для первого поста. В миграции уведомлений делаете форейгн кей. Вот вам пример

$table->foreign('app_id')->references('id')->on('apps')->onDelete('cascade');

Изменено lodar (14.05.2019 17:58:13)

Не в сети

#5 14.05.2019 18:21:52

Re: Как удалить относящиеся уведомления к посту, при его удалении?

через foreign удлять хорошо, но не всегда.
есть ситуации, когда внешний ключ не прописан либо связь таблиц условная, либо есть загруженные файлы в систему.
для этого стоит использовать Observer
https://laravel.com/docs/master/eloquent#observers

Не в сети

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