Yii: Выборка нескольких значений в условии condition у CDbCriteria.
Нужно выбирать записи из базы, в которых поле может принимать несколько значений. Расширяем функцмональность из стандартного класса Lookup. Дополняем пару функции в модели ещё одним параметром $codes:
public static function items($type, $codes=null) { if(!isset(self::$_items[$type])) self::loadItems($type, $codes); return self::$_items[$type]; } ... private static function loadItems($type, $codes=null) { self::$_items[$type]=array(); $criteria = new CDbCriteria(array( 'condition'=>'type=:type', 'params'=>array(':type'=>$type), 'order'=>'position', )); if(isset($codes)) $criteria->addInCondition('code', $codes); $models=self::model()->findAll($criteria); foreach($models as $model) self::$_items[$type][$model->code]=$model->name; }
Таким образом мы сможем высасывать из таблицы Lookup базы данных не только по типу, но и по коду(ам), а можем и не указывать $codes, тогда доп. условие addInCondition не сработает и выберутся все строки как обычно с типом, переданным в type.
Дальше в нужной модели введём массив значений, либо ещё как-то зададим массив codes:
public $codes = array(1,2,3,4,5,7);
И в виде _form.php:
<div class="row"><?php echo $form->labelEx($model,'discipline_id'); ?> <?php echo $form->dropDownList($model,'discipline_id',Lookup::items('Discipline', $model->codes)); ?> <?php echo $form->error($model,'discipline_id'); ?> </div>
Если не добавлять $model->codes, то выберутся все строки соответствующие типу "Discipline".
Leave a Comment