1

我正在为我的 webapp 使用 Yii 框架(使用 ACtiveRecord)。在 ACtiveRecord 的后面,框架管理来自数据库的所有查询。

我的问题是我在共享服务器上,事实证明服务器启用了查询缓存,这在 S 中是一个痛苦。我真的需要绕过查询缓存。FluSH 对我不起作用,因为我没有 RELOAD 权限。

如果我将每个 ActiveRecord 数据库提取用作粗略的 mySQL 查询,我想我可以将查询本身设置为禁用缓存,例如使用 NO_CACHE 标记,或使用涉及当前时间戳的错误查询术语(导致在每个查询中都是不同的查询文本)。

我对你们的问题是使用 Yii/ActiveRecord 方案的最佳方法是什么。我可以更改 findAll() 函数的实现吗?我有一个 CActiveRecord 的子类,所以如果有什么我可以在那里做的,那就太完美了。

对不起,很长的问题。宜兰

4

1 回答 1

1

默认范围

模型类可以有一个默认范围,该范围将应用于有关模型的所有查询(包括关系查询)。为此,我们重写 CActiveRecord::defaultScope 方法,如下所示,

class Content extends CActiveRecord
{
    public function defaultScope()
    {
        return array(
            'condition'=>"1<='".time()."'",
        );
    }
}

注意:默认范围和命名范围仅适用于 SELECT 查询。对于 INSERT、UPDATE 和 DELETE 查询,它们会被忽略。此外,在声明范围(默认或命名)时,AR 类不能用于在声明范围的方法中进行 DB 查询。

http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

于 2013-01-17T13:35:30.533 回答