2012-03-28 4 views
5

Ich lief Limit Problem. Der Code, den ich verwende ist die folgende:Yii begrenzen auf verwandtes Modell während der Abfrage

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

Ich möchte die Beiträge für Paging-Zwecke abgefragt begrenzen. Ich habe auch versucht,

nach dem Limit hinzuzufügen, das hilft auch nicht.

Jede Hilfe wird geschätzt.

+0

+1 gute Frage, ich überprüfte die Abfrage, die ausgeführt wird, 'Limit' wird nie in der Abfrage angefügt. –

Antwort

6

Dies wird auf jeden Fall funktionieren, gerade getestet:

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

lassen Sie mich wissen, wenn Sie irgendwelche Klarstellungen benötigen, und wie es für Sie funktioniert. –

+1

danke für die Antwort, es funktioniert. Es ist klar für mich, warum. –

+0

froh zu helfen ... –

0

Sie könnten Umfang in Ihrem Beitrag Modell hinzufügen und

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); 

Und Sie haben sauberen und gut lesbaren Code verwenden.

Weitere Informationen über Bereiche http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

Und in diesem Forum Post wie params zu Ihrem Rahmen geben mit -> mit http://www.yiiframework.com/forum/index.php/topic/23358-parameterized-vs-named-scopes-question-using-yii-118/

+0

gute Idee der Verwendung von Bereichen, aber das Limit immer noch nicht funktioniert –

1

Hier ist ein Wiki auf parameterized named scopes.

Wenn Sie jedoch Datensätze in RELATED-Tabellen filtern möchten, während Sie die relationale Abfrage verwenden, sollten Sie defaultScope() verwenden.

Hier ist ein Wiki auf defaultScope und es zeigt auch, wie defaultScope zu umgehen, wenn es nicht benötigt wird.

Verwandte Themen