Разгледайте Yii Relations с ограничения

Имам модел Community и модел Content. Всеки Content има колона community_id. Създадох тази проста връзка:

$relations['contents'] = array(self::HAS_MANY, 'Content', 'community_id','order'=>'weight DESC, id DESC');

(обърнете внимание на ПОРЪЧКАТА)

В CommunityController искам да покажа най-добрите 20 съдържание (след това в друго действие на ajax вземете следващите 20, без притеснения за това).

Вероятно бих могъл да го направя чрез критерии, нещо като:

$criteria = new CDbCriteria;
$criteria->compare('community_id',$model->id);
$criteria->limit = 20;
$criteria->order = 'weight DESC, id DESC';
$contents = Content::model()->findAll($criteria);

Но кодът ми изглежда прекалено дълъг (твърде дълъг) и имам чувството, че изобщо не използвам релацията, която създадох. Има ли по-прост начин? Или търся проблеми там, където ги няма?


person Nathan H    schedule 18.02.2013    source източник


Отговори (2)


Можете да използвате връзката си като метод и да подадете критерии там:

$contents = $model->contents(array('limit' => 20));
person Oleksandr Vyshniakov    schedule 20.02.2013

Можете да използвате CActiveRecord::getRelated() и да добавите новите си критерии като последен параметър . Вашият код може да изглежда нещо подобно

$criteria = new CDbCriteria;
$criteria->limit = 20;
$contents=$model->getRelated('contents',true,$criteria);
person topher    schedule 18.02.2013