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

Другие вопросы по тегам