2012-03-28 29 views
5

我遇到極限問題。我正在使用的代碼如下:Yii在查詢時限制相關型號

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

我想限制查詢分頁目的的職位。我也試着限制後增加

'together'=>true 

,這不利於太多。

任何幫助表示讚賞。

+0

+1好問題,我檢查了執行的查詢,'limit'永遠不會被追加到查詢中。 – 2012-03-29 07:23:06

回答

6

這肯定會工作,只是測試:

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

讓我知道如果您需要任何澄清,以及它如何爲您工作。 – 2012-03-29 10:13:41

+1

感謝您的答案,它的工作。我明白爲什麼。 – 2012-03-29 10:57:51

+0

很高興幫助... – 2012-03-29 10:59:05

0

你可以在帖子添加到模型範圍和使用

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

更多的信息和這個論壇帖子怎麼給使用PARAMS到你的範圍 - >與 http://www.yiiframework.com/forum/index.php/topic/23358-parameterized-vs-named-scopes-question-using-yii-118/

+0

使用示波器的好主意,但限制仍然不起作用 – 2012-03-29 06:37:01

1

這是關於parameterized named scopes的維客。

但是,如果要在使用關係查詢時過濾相關表中的記錄,則應該使用defaultScope()。

這是一個關於defaultScope的wiki,它還顯示瞭如何在不需要時繞過defaultScope。