Я хочу удалить конкретную модель из кеша по ее идентификатору. Это работает в контроллере, как ожидалось, но не с использованием замыкания модели.
Что у меня в 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 ответ
Убедитесь, что вы действительно меняете значение в своей модели, потому что событие updated
срабатывает только тогда, когда модель была грязной, как вы можете видеть здесь.
Однако событие saved
срабатывает всякий раз, когда вы вызываете метод save()
, как вы можете видеть здесь:
protected static function booted()
{
static::saved(function ($post) {
Cache::forget('post:'.$post->id);
});
}
Из документов:
Событие
retrieved
срабатывает, когда существующая модель извлекается из база данных. Когда новая модель сохраняется в первый раз, Запустятся событияcreating
иcreated
. Если модель уже существовала в вызывается база данных и метод сохранения,updating
/updated
события будут срабатывать. Однако в обоих случаях событияsaving
/saved
будет стрелять.
Похожие вопросы
Новые вопросы
laravel
Laravel - это бесплатная веб-инфраструктура PHP с открытым исходным кодом, созданная Тейлором Отвеллом и предназначенная для разработки веб-приложений по архитектурному шаблону модель-представление-контроллер (MVC) на основе Symfony. Исходный код Laravel размещен на GitHub и лицензирован в соответствии с условиями лицензии MIT.