Laravel принудительно удаляет событие в отношениях

Я разрабатываю веб-приложение Laravel, используя Laravel 5.2. Мой вопрос очень прост... Как мне прослушать событие forceDelete, чтобы принудительно удалить модельные отношения?

Я искал в Интернете и S.O. для некоторых, но все вопросы/ответы, которые я нашел, были связаны с методом удаления, а также в документации по API я не нашел очень много...

В моем случае у меня есть модель реестра и модель RegistryDetail.

Таблица реестра

|id|name|surname|....

Таблица RegistryDetail

|id|id_registry|....

Я создал для обеих этих функций boot:

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

    static::deleted(function($registry) {
        // Delete registry_detail
        $registry->registryDetail->delete();
    });

    static::restored(function($registry) {
        // Restore registry_detail
        $registry->registrydetail()->withTrashed()->restore();
    });
}

Поскольку обе модели имеют SoftDeletes, функция static::deleted вызывается только при вызове метода delete(). если я вызову метод forceDelete(), связанная модель не будет удалена из базы данных.

Если вам нужна дополнительная информация, дайте мне знать.

заранее спасибо


person IlGala    schedule 22.01.2016    source источник
comment
вы можете изменить внешнее отношение, чтобы выполнить каскадное удаление при удалении.   -  person naneri    schedule 22.01.2016
comment
Я не хочу менять структуру своей базы данных... Я предпочитаю более мягкое решение, подобное приведенному ниже ответу.   -  person IlGala    schedule 24.01.2016


Ответы (1)


Событие deleted должно по-прежнему срабатывать при вызове forceDelete(). Внутри метода события deleted() вы можете проверить свойство forceDeleting protected через isForceDeleting(), чтобы узнать, находитесь ли вы в обычном или принудительном удалении.

static::deleted(function($registry) {
    // Delete registry_detail
    if ($registry->isForceDeleting()) {
        $registry->registryDetail->forceDelete();
    } else {
        $registry->registryDetail->delete();
    }
});
person patricus    schedule 23.01.2016
comment
Спасибо @patricus, это решение решило мою проблему, и это было именно то, что я искал. - person IlGala; 25.01.2016