我刚刚查看了 CDbCriteria
的手册页,但没有足够的信息。
此属性自 v1.1.7 起可用,我找不到任何帮助。
是不是为了动态变化Model->scopes
“即时”?
最佳答案
默认情况下,范围是创建简单过滤器的一种简单方法。使用范围,您可以自动按特定列对结果进行排序、限制结果、应用条件等。在@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 个项目。当然,您可以将示例扩展到数据库中的几乎任何属性。干杯
关于yii - 谁能解释 CDbCriteria->scopes 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524669/