Yii: Выборка нескольких значений в условии condition у CDbCriteria.

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".




Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.