Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Коробочный компонент уведомлений.
Когда комментишь статью, то приходят уведомления, и они помечаются прочитанными,
как сделать, что бы при удалении статьи, из таблицы удалялись эти уведомления?
Ведь в таблицу не записывается отдельный id статьи, а записывается всё в столбец data.
Может раширить таблицу уведомлений и добавить отдельный столбец id поста?
Или есть уже готовое решение?
Ведь взять все записи и перебрать каждую, потом искать есть ли в этом объекте id поста,
это будет слишком большая нагрузка и это не логично.
Не в сети
Должна быть отдельная таблица, например, comments. В ней делаешь столбец article_id, который связываешь со столбцом id таблицы articles. Если связь не сделал в миграции, то можно в phpMyAdmin.
В модели Article прописывешь отношение hasMany(), в модели Comment - belongsTo().
В методе destroy() контроллера статей перед удалением статьи вначале удаляешь комменты
Comment::where('article_id', $id)->delete();
Не в сети
Простите за оффтоп, но разве если у модели связи прописаны это всё равно не сработает и без указания ключей в миграции? Я думал раньше что эти связи в миграциях прописывают только для того чтобы облегчить поиск серверу
Не в сети
Простите за оффтоп, но разве если у модели связи прописаны это всё равно не сработает и без указания ключей в миграции? Я думал раньше что эти связи в миграциях прописывают только для того чтобы облегчить поиск серверу
Только если в миграции вы указали "->onDelete('cascade');". Если вкратце связи нужны для обеспечения целостности самих данных, оптимизации запросов со стороны бд и тд.
Это собственно и ответ для первого поста. В миграции уведомлений делаете форейгн кей. Вот вам пример
$table->foreign('app_id')->references('id')->on('apps')->onDelete('cascade');
Изменено lodar (14.05.2019 17:58:13)
Не в сети
через foreign удлять хорошо, но не всегда.
есть ситуации, когда внешний ключ не прописан либо связь таблиц условная, либо есть загруженные файлы в систему.
для этого стоит использовать Observer
https://laravel.com/docs/master/eloquent#observers
Не в сети