Здравствуйте! Оптимизирую свой сайт: хочу по минимуму запросов к базе. Столкнулся со следующей проблемой: Serialization of 'Closure' is not allowed
Мой код выглядит следующим образом:
$products = Cache::remember("shop-{$id}-products", 30, function () {
return Product::with(['servers', 'category'])->get();
});
И я понимаю эту ошибку: я пытаюсь кэшировать коллекцию из моделей. Все было бы проще, если я мог кэшировать запрос вот так:
$products = Product::with(['servers', 'category'])->remember(30)->get();
Однако мне критически важно знать ключ, чтобы добраться до этого кэша. Дело в том, что у клиента есть панель управления своим магазином и, соответственно, сам магазин. Это – два разных сервиса и расположены на разных сайтах. При изменении в товарах в панели управления я хочу принудительно очищать кэш по его ключу.
Также знаю, что я могу кэшировать полученный массив:
$products = Cache::remember("shop-{$id}-products", 30, function () {
return Product::with(['servers', 'category'])->get()->toArray();
});
Но такой вариант тоже мне не подходит. В моделях есть множество крайне необходимых методов, без которых обойтись невозможно.
Подскажите, как можно поступить в данной ситуации? Возможно, есть другой путь?