Именованные группы условий задаются в методу scopes() class Post extends CActiveRecord { public function scopes() { return array( 'published'=>array( 'condition'=>'status=1', ), 'recently'=>array( 'order'=>'create_time DESC', 'limit'=>5, ), ); } } А вызываются через модель $posts=Post::model()->published()->recently()->findAll(); Именованные группы условий можно "осложнить" параметрами public function recently($limit=5) { $this->getDbCriteria()->mergeWith(array( 'order'=>'create_time DESC', 'limit'=>$limit, )); return $this; } $posts=Post::model()->published()->recently(3)->findAll(); Полезно также задать условие по умолчанию для всех Post::model()->findAll() class Content extends CActiveRecord { public function defaultScope() { return array( 'condition'=>"language='".Yii::app()->language."'", ); } } Можно также сделать унивесальную группу в поведении, которую можно применять к разным объектам: public function published($val = true) { $val = (int)$val; $owner=$this->getOwner(); $criteria=$owner->getDbCriteria(); $alias=$owner->getTableAlias(); $criteria->mergeWith(array( 'condition'=>$alias.'.published='.$val, )); return $owner; }
Yii Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor