Ограничение Yii для связанной модели при запросе - PullRequest
5 голосов
/ 29 марта 2012

Я столкнулся с проблемой ограничения.Я использую следующий код:

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

Я хочу ограничить количество постов, запрашиваемых в целях подкачки.Я также пытался добавить

'together'=>true

после лимита, это тоже не помогает.

Любая помощь приветствуется.

Ответы [ 3 ]

6 голосов
/ 29 марта 2012

Это точно будет работать, только что протестировано:

$model = PostCategory::model();
$record = $model->with(array(
  'posts'=>array(
     'order'=>'posts.createTime DESC',
  ))->findByPK($id,
             array('limit'=>3,'together'=>true) // adding this works
);
1 голос
/ 02 мая 2013

Вот вики на параметризованных именованных областях .

Но если вы хотите фильтровать записи в СВЯЗАННЫХ таблицах при использовании реляционного запроса, вам следует использовать defaultScope ().

Вот вики на defaultScope , а также показывает, как обойти defaultScope, когда он не нужен.

0 голосов
/ 29 марта 2012

Вы можете добавить область действия в вашей модели 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

И в этом сообщении на форуме, как задать параметры для вашей области, используя -> с http://www.yiiframework.com/forum/index.php/topic/23358-parameterized-vs-named-scopes-question-using-yii-118/

...