yii - 谁能解释 CDbCriteria->scopes 是如何工作的?

标签 yii cdb

我刚刚查看了 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/

相关文章:

database - cdb - 大文件(数百 GB)的常量键值存储

c++ - 使枚举调试器感知的宏?

c - 基本 cdb : does cdb vary how it notates scope?

activerecord - yii2 如何使用外键获取关系和获取 id 的标题

javascript - 如何在jquery中使用Delay来执行方法

php - 在 Yii 中将当前日期加 1 个月

php - Yii:Framework - 从 $_POST 中查找具有多个相关类别的表

php - 在 ACF 的 matchCallback 中读取 Action 参数