С помощью with() можно прикручивать доп. сведения. Концепция: $posts=Post::model()->published()->recently()->with('comments')->findAll(); Развитие концепции $posts=Post::model()->with('comments:recently:approved')->findAll(); // или, начиная с версии 1.1.7 $posts=Post::model()->with(array( 'comments'=>array( 'scopes'=>array('recently','approved') ), ))->findAll(); // или, начиная с версии 1.1.7 $posts=Post::model()->findAll(array( 'with'=>array( 'comments'=>array( 'scopes'=>array('recently','approved') ), ), )); // имя связи comments повторяется два раза - // вместо «жадной» выборки получается «отложенная» $approvedComments = $post->comments('comments:approved'); Именованные группы могут быть использованы при описании связей модели class User extends CActiveRecord { public function relations() { return array( 'posts'=>array(self::HAS_MANY, 'Post', 'author_id', 'with'=>'comments:approved'), ); } } // или, начиная с версии 1.1.7 class User extends CActiveRecord { public function relations() { return array( 'posts'=>array(self::HAS_MANY, 'Post', 'author_id', 'with'=>array( 'comments'=>array( 'scopes'=>'approved' ), ), ), ); } } С версии 1.1.7 появилась возможность передавать параметры именованным группам условий связи. $users=User::model()->findAll(array( 'with'=>array( 'posts'=>array( 'scopes'=>array( 'rated'=>5, ), ), ), )); class Post extends CActiveRecord { public function rated($rating) { $this->getDbCriteria()->mergeWith(array( 'condition'=>'rating=:rating', 'params'=>array(':rating'=>$rating), )); return $this; } }
Yii Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor