Laravel удалить запись в таблицах отношений на основе того же идентификатора - PullRequest
1 голос
/ 12 марта 2020

В основном у меня есть три таблицы: sms_content, sms_content_cities и sms_content_categories.

Я хочу удалить запись из таблицы sms_content, удалив запись из таблицы sms_content, запись должна быть удалена из таблиц sms_content_cities и sms_content_categories.

1004 * Вот мой код:
$smsContentCategory = SmsContentCategories::where('sms_content_id', $id)->first();
        $smsContentCategory->delete();

        $smsContentCities = SmsContentCity::where('sms_content_id', $id)->first();

        foreach ($smsContentCities as $city){
            if(!empty($city)){
                $city->delete();
            }
        }

        $model = SmsContent::find($id);
        $model->delete();

Я использую категорию синглов и несколько городов.

Как мне удалить связанные записи.

Ответы [ 4 ]

1 голос
/ 12 марта 2020

Вам не нужно использовать foreach для этого.

SmsContentCategories::where('sms_content_id', $id)->delete();
SmsContentCity::where('sms_content_id', $id)->delete();
SmsContent::find($id)->delete();
1 голос
/ 12 марта 2020
SmsContentCategories::where('sms_content_id', $id)->delete();

SmsContentCity::where('sms_content_id', $id)->delete();

SmsContent::where('id', $id)->delete();
0 голосов
/ 12 марта 2020

Удалить только родительскую модель.

SmsContent::find($id)->delete();

Для дочерних таблиц sms_content_cities и SmsContentCategories добавьте условие ON DELETE CASCADE, которое автоматически удаляло бы строки из этих дочерних таблиц в тот момент, когда родительская строка получает удален. Вы можете создать 2 новых миграционных файла и добавить это ограничение в каждый из них и выполнить php кустарное миграционное .

$table->foreign('sms_content_id')->references('id')->on('sms_content')->onDelete('cascade');

Laravel документы для каскада на удаление .

0 голосов
/ 12 марта 2020

ПОПРОБУЙТЕ

SmsContentCategories::where('sms_content_id', $id)->delete();

SmsContentCity::where('sms_content_id', $id)->delete();

$model = SmsContent::find($id);
$model->delete();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...