Я хочу удалить конкретную модель из кеша по ее идентификатору. Это работает в контроллере, как ожидалось, но не с использованием замыкания модели.

Что у меня в App\Models\Post:

use Illuminate\Support\Facades\Cache;

protected static function booted()
{
    static::updated(function ($post) {
        Cache::forget('post:'.$post->id);
    });
}

Если я сделаю Cache::forget('post:'.$post->id); в контроллере, все заработает.

Что-то мне не хватает?

1
eskimo 16 Июл 2020 в 17:21

1 ответ

Лучший ответ

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

Однако событие saved срабатывает всякий раз, когда вы вызываете метод save(), как вы можете видеть здесь:

protected static function booted()
{
    static::saved(function ($post) {
        Cache::forget('post:'.$post->id);
    });
}

Из документов:

Событие retrieved срабатывает, когда существующая модель извлекается из база данных. Когда новая модель сохраняется в первый раз, Запустятся события creating и created. Если модель уже существовала в вызывается база данных и метод сохранения, updating / updated события будут срабатывать. Однако в обоих случаях события saving / saved будет стрелять.

0
Remul 17 Июл 2020 в 07:09