Yii - CActive запись - Как обойти кеш запросов сервера
Я использую инфраструктуру Yii для моего веб-приложения (которое использует ACtiveRecord). В задней части ACtiveRecord платформа управляет всеми запросами из базы данных.
Моя проблема в том, что я нахожусь на общем сервере, и оказалось, что на сервере включен кеш запросов, что является проблемой в S. Мне действительно нужно обойти кеш запросов. FlUSH не будет работать для меня, потому что у меня нет привилегии RELOAD.
Если бы я использовал каждый выбор базы данных ActiveRecord в качестве необработанного запроса MySQL, я полагаю, что мог бы установить сам запрос таким образом, чтобы отключить кэш, например, с помощью тега NO_CACHE или с использованием ложного термина запроса, который включает текущую метку времени (в результате чего в каждом запросе разный текст запроса).
У меня вопрос к вам, ребята, как лучше всего это сделать с помощью схемы Yii/ActiveRecord. Могу ли я изменить реализацию функции findAll()? У меня есть подкласс CActiveRecord, поэтому, если я могу что-то там сделать, это было бы идеально.
Извините за длинный вопрос. Илан
1 ответ
Область действия по умолчанию
Класс модели может иметь область действия по умолчанию, которая будет применяться ко всем запросам (включая реляционные) о модели. Для этого мы переопределяем метод CActiveRecord::defaultScope следующим образом:
class Content extends CActiveRecord
{
public function defaultScope()
{
return array(
'condition'=>"1<='".time()."'",
);
}
}
Примечание. Область по умолчанию и именованные области применяются только к запросам SELECT. Они игнорируются для запросов INSERT, UPDATE и DELETE. Кроме того, при объявлении области (по умолчанию или именованной) класс AR нельзя использовать для выполнения запросов к БД в методе, который объявляет область.
http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes