Yii范围相关模型

时间:2013-12-11 09:57:59

标签: php yii scope relational-database yii-cactiverecord

我有Page模型HAS_MANY Attachment 在页面模型中:

public function relations()
{
    return array(
        'attachments'=>array(self::HAS_MANY, 'Attachment', 'parent_id'),
    )
}

我正在寻找一种方法来对这些附件进行一些范围界定。

PageController我有:

    $model = Page::model()->with(array('attachments'))->findByAttributes(array('slug' => $slug))

例如,在页面视图中,我想:

  • 获取所有附件:$model->attachments(这很好用),但我也需要:
  • 获取所有已发布的附件(全部包含status = 1)
  • 获得首次推广的附件(第一个附加promoted = 1)
  • 仅获取图片(mime_type in_array 'image/jpeg', 'image/gif', ...
  • 获取所有其他文件(非图像的所有内容)

以及它们的任何组合。例如:第一个推广和发布的图像

我想最好的选择是在没有任何额外查询的情况下执行此操作,只过滤$model->attachments,但这可能吗?

编辑:

有一个pages表和另一个attachments

我在附件表格中

idparent_idfile_namemime_typestatuspromoted

1 个答案:

答案 0 :(得分:1)

你可以这样做:

$posts=Post::model()->with(array(
    'comments'=>array(
        'scopes'=>array('recently','approved')
    ),
))->findAll();
// or since 1.1.7
$posts=Post::model()->findAll(array(
    'with'=>array(
        'comments'=>array(
            'scopes'=>array('recently','approved')
        ),
    ),
));

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes