任何人都可以解释CDbCriteria->范围的工作原理吗?

Rus*_*lex 4 yii cdb

我刚刚查看了手册页CDbCriteria,但没有足够的信息.此属性自v1.1.7起可用,我找不到任何帮助.是动态改变Model->scopes"即时"吗?

Kor*_*lis 13

范围是默认情况下创建简单过滤器的简便方法.使用范围,您可以自动按特定列对结果进行排序,限制结果,应用条件等.在@ldg提供的链接中,有一个很好的例子:它们有多酷:

$posts=Post::model()->published()->recently()->findAll();
Run Code Online (Sandbox Code Playgroud)

有人正在一行中检索所有最近发布的帖子.它们比内联条件(例如Post::model()->findAll('status=1'))更容易维护,并且封装在每个模型中,这意味着高透明度和易用性.

另外,您可以创建自己的基于参数的范围,如下所示:

public function last($amount)
{
    $this->getDbCriteria()->mergeWith(array(
        'order' => 't.create_time DESC',
        'limit' => $amount,
    ));
    return $this;
}
Run Code Online (Sandbox Code Playgroud)

将这样的内容添加到模型中将允许您选择要从数据库中检索的对象数量(按创建时间排序).通过返回对象本身,您允许方法链接.

这是一个例子:

$last3posts=Post::model()->last(3)->findAll();
Run Code Online (Sandbox Code Playgroud)

获取最后3项.当然,您可以将示例扩展到数据库中的几乎任何属性.干杯