Как отключить мягкое удаление в модели Laravel 5.8 Eloquent

В моем проекте все модели расширяют класс BaseModel, который по умолчанию использует признак SoftDeletes. Но в некоторых конкретных случаях, например. в классе ShouldHardDelete я не хочу, чтобы мои записи БД удалялись мягко. Предположим, я не могу отрицать расширение BaseModel.

Какие изменения я должен внести в свой класс ShouldHardDelete, чтобы предотвратить использование обратимого удаления?


person vvmul    schedule 11.07.2019    source источник
comment
из любопытства, почему вы хотите полностью удалить запись?   -  person usrNotFound    schedule 11.07.2019
comment
@usrNotFound, мне придется вставлять и удалять несколько записей (нельзя просто изменить их, слишком сложная логика). Мягкое удаление не так уж необходимо для этих записей, хранение удаленных в БД приведет к потере слишком большого дискового пространства.   -  person vvmul    schedule 11.07.2019
comment
Я думаю $modal->forceDelete() и будет ли эта работа   -  person usrNotFound    schedule 11.07.2019
comment
Это вариант, но это заставит меня выполнить исключительную обработку, если я когда-нибудь захочу удалить эти объекты вместе с некоторыми другими программно удаляемыми.   -  person vvmul    schedule 11.07.2019


Ответы (1)


Есть две вещи, которые вы должны сделать:

  1. Существует статический метод bootSoftDeletes() в свойстве SoftDeletes, который инициализирует поведение мягкого удаления для модели:
    /**
     * Boot the soft deleting trait for a model.
     *
     * @return void
     */
    public static function bootSoftDeletes()
    {
        static::addGlobalScope(new SoftDeletingScope);
    }

Переопределите его в классе ShouldHardDelete на пустой метод:

    /**
     * Disable soft deletes for this model
     */
    public static function bootSoftDeletes() {}
  1. Установите для поля $forceDeleting значение true в ShouldHardDelete:
    protected $forceDeleting = true;

Таким образом, вы можете отключить поведение мягкого удаления, но при этом расширить BaseModel, который использует черту SoftDeletes.

person vvmul    schedule 11.07.2019