Вы не должны использовать beforeFind()
для этого. Помимо технических проблем в реализации, вы можете получить много побочных эффектов и трудно отладить ошибки из-за этого. Это связано с тем, что кэш может быть устаревшим, и многие внутренние логики Yii могут полагаться на предположение, что findByAttributes()
(и другие методы) всегда выбирает свежие данные из базы данных. Вы также не сможете игнорировать кеш и получать модели напрямую из базы данных.
Обычно у вас есть 2 варианта:
$model = UsersModel::model()->cache(60)->findByAttributes([...])
Это запросит результаты кеша за 60 секунд.
2. Пользовательские помощники
Вы можете добавить пользовательские методы, которые упростят использование кэшированных активных записей:
public static function findByAttributesFromCache($attributes = []) {
$result = Yii::app()->cache->get(json_encode($attributes));
if ($result === false) {
//fetch data from db and set to cache
$result = static::model()->findByAttributes($attributes);
Yii::app()->cache->set(json_encode($attributes), $result, 60);
}
return $result;
}
Вы можете добавить такой метод для черты и использовать его в нескольких моделях. Тогда все, что вам нужно, это:
$userModel = UsersModel::findByAttributesFromCache([...]);