$result = $db->cache(function ($db) {
return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();
});
Интерусуют 2 вопроса
1. Есть запрос добавление записи( выполняется 1-2 раза в месяц), и при этом запросе нужно обновить кэш.
2. Возможно ли в функцию передать какие-либо параметры?
С кэшированием конечно в yii2 наворотили...
Я бы изменил подход к кэшированию пока не поздно.
Реально ведь жутко неудобно как сейчас - с анонимной функцией.
Можно поинтересоваться, а чем неудобно кеширование с использованием анонимной функции?
По поводу "пока не поздно", по-моему уже как раз поздно, ведь был уже стабильный релиз, поэтому теперь ломать обратную совместимость никто не будет.
eresik писал(а):С кэшированием конечно в yii2 наворотили...
Я бы изменил подход к кэшированию пока не поздно.
Реально ведь жутко неудобно как сейчас - с анонимной функцией.
Допустим надо кэшировать простой реляционный запрос
$country->states;
который где-нибудь во view выполняется
И что, городить огород во view с анонимной функцией?
$states=\Yii::$app->db->cache(function() use ($country){ return $country->states; });
Это же выглядит ужасно, сходу непонятно, и просто засоряет код.
Конечно, можно сделать жадную загрузку ещё в контроллере, но её же не всегда можно сделать удобно, да и не всегда она нужна.
eresik писал(а):Допустим надо кэшировать простой реляционный запрос
$country->states;
который где-нибудь во view выполняется
И что, городить огород во view с анонимной функцией?
$states=\Yii::$app->db->cache(function() use ($country){ return $country->states; });
Это же выглядит ужасно, сходу непонятно, и просто засоряет код.
Конечно, можно сделать жадную загрузку ещё в контроллере, но её же не всегда можно сделать удобно, да и не всегда она нужна.
eresik писал(а):
Конечно, можно сделать жадную загрузку ещё в контроллере, но её же не всегда можно сделать удобно, да и не всегда она нужна.
Yii::$app->cache->get - если вы это называет прямым доступом к кэшу, то пусть так. Это решает вашу. проблему. Внесите в модель метод с таким кэшированием и все.