Триггер удаления Laravel ничего не происходит

У меня есть две модели с отношениями.

Поэтому, когда модель A будет удалена, все связанные модели B также должны быть удалены.

Я работаю с мягким удалением.

Вот мой триггер в модели А:

protected static function boot()
{
    parent::boot();

    // Delete Relations
    self::deleting(function (Customer $customer) {
        $customer->contacts()->delete();
    });
}

Когда я удаляю модель A, связанные модели из B не будут затронуты. Так что ничего не происходит.

Так что триггер не работает. У меня нет ошибки или чего-то еще. Кто-нибудь знает, как мне найти ошибку?

Редактировать: Отношения выглядят так:

public function contacts()
{
    return $this->hasMany(Contact::class);
}

а также

public function customer()
{
    return $this->belongsTo(Customer::class);
}

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

Вы ищете что-то подобное? stackoverflow.com/questions/14174070/…

Harry 25.03.2019 17:53

Как вы удаляете Модель А?

Jonas Staudenmeir 25.03.2019 17:58
$customer->delete();
Markus 25.03.2019 17:59

Можете ли вы привести минимальный пример, чтобы воспроизвести проблему?

Jonas Staudenmeir 01.04.2019 05:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
543
2

Ответы 2

Возможно, вам нужно изменить свой запрос, чтобы завершить построитель отношений, а затем удалить. Изменять:

$customer->contacts()->delete();

к:

$customer->contacts->delete();

Спасибо. Я изменил свой код, но проблема все та же :(

Markus 25.03.2019 17:31

Можете ли вы опубликовать ваши модельные отношения, пожалуйста.

thisiskelvin 25.03.2019 17:33

Вы пробовали static::deleting вместо self::deleting?

thisiskelvin 25.03.2019 17:40

@Маркус Ты пробовал static::deleted вместо static::deleting?

thisiskelvin 25.03.2019 17:53

Независимо от того, использую ли я удалённый или удалённый. Та же проблема

Markus 25.03.2019 18:02

Вы должны изменить свой файл миграции

$table->foreign('customer_id')->references('id')->on('customers')->onDelete('cascade');

вы также можете удалить контакты, прежде чем удалить клиента, как это

class Customer extends Eloquent
{
    public function contacts()
    {
        return $this->has_many('Contact');
    }

    public function delete()
    {
        // delete all related contacts
        $this->contacts()->delete();

        // delete the customer
        return parent::delete();
    }
}

Другие вопросы по теме