Yii 谁能解释一下CDbCriteria->;scopes有效吗?

Yii 谁能解释一下CDbCriteria->;scopes有效吗?,yii,cdb,Yii,Cdb,我刚刚查看了CDbCriteria的手册页,但是没有足够的信息。 此属性自v1.1.7版起可用,我找不到任何帮助。 是否用于动态更改模型->范围“动态”是的,范围可用于更改具有预构建条件的CDbCriteria属性,也可作为参数传递。在1.1.7之前,您可以在model()查询中使用它们,并将它们链接在一起。见: 从1.1.7开始,还可以将作用域用作CDbCriteria属性。 请参阅:默认情况下,作用域是创建简单筛选器的简单方法。使用范围,您可以自动按特定列对结果进行排序、限制结果、应用条件

我刚刚查看了CDbCriteria的手册页,但是没有足够的信息。 此属性自v1.1.7版起可用,我找不到任何帮助。
是否用于动态更改
模型->范围
“动态”

是的,范围可用于更改具有预构建条件的CDbCriteria属性,也可作为参数传递。在1.1.7之前,您可以在model()查询中使用它们,并将它们链接在一起。见:

从1.1.7开始,还可以将作用域用作CDbCriteria属性。
请参阅:

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

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

此外,您还可以创建自己的基于参数的作用域,如下所示:

public function last($amount)
{
    $this->getDbCriteria()->mergeWith(array(
        'order' => 't.create_time DESC',
        'limit' => $amount,
    ));
    return $this;
}
向模型中添加类似的内容可以让您选择要从数据库中检索的对象数量(按创建时间排序)。 通过返回对象本身,允许方法链接

下面是一个例子:

$last3posts=Post::model()->last(3)->findAll();

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

你能给我举个例子吗?我自己也尝试过,但是我找不到一种方法来使用criteria scopes属性“动态”更改模型作用域中的参数。但是我问过如何将CDbCriteria用于作用域,而不是CActiveRecord作用域。如何将它们与params.CActiveRecord作用域一起使用实际上受到CDbCriteria中更改的影响,而CDbCriteria作用域实际上会过滤CActiveRecord记录。CDbCriteria是一种封装数据库结果条件的方法。所以我没有发现任何区别。如果你改变主意,看到一个大代码块,那么last()函数就是一个带有参数的自定义范围。