Yii在查询时限制相关模型

时间:2012-03-28 22:31:52

标签: php sql yii limit

我遇到了极限问题。我使用的代码如下:

$model = PostCategory::model();
  $record = $model->with(array(
    'posts'=>array(
      'order'=>'posts.createTime DESC',
      'limit'=>3,
))->findByPK($id);

我想限制查询用于分页的帖子。我还尝试添加

'together'=>true

在限制之后,这也没有帮助。

感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

这肯定会有效,只是经过测试:

$model = PostCategory::model();
$record = $model->with(array(
  'posts'=>array(
     'order'=>'posts.createTime DESC',
  ))->findByPK($id,
             array('limit'=>3,'together'=>true) // adding this works
);

答案 1 :(得分:1)

以下是parameterized named scopes上的wiki。

但是如果你想在使用Relational Query时过滤RELATED表中的记录,那么你应该使用defaultScope()。

以下是defaultScope上的wiki,还显示了在不需要时绕过defaultScope的方法。

答案 2 :(得分:0)

您可以在Post模型中添加范围并使用

PostModel.php

public function recent( $limit = 3 ) {

    $this->getDbCriteria()->mergeWith(array(
        'order' => $this->getTableAlias(false, false).'.createTime DESC',
        'limit' => (int) $limit,
    ));

    return $this;
}

MyController.php

$record = $model->with('posts:recent')->findByPK($id);

你的代码清晰可读。

查看有关范围的更多信息 http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

此论坛发布了如何使用 - > with 为您的范围提供参数 http://www.yiiframework.com/forum/index.php/topic/23358-parameterized-vs-named-scopes-question-using-yii-118/