Вставить Данные Из Другого Модуля

Начал изучать Yii, встала такая проблема:

есть 2 таблицы contragents (id,…) и tickets (…,id_contragent,…)

Так вот как мне при создании новой заявки (tickets) внедрить селектбокс из contragents?

Читал http://www.yiiframework.com/doc/guide/1.1/ru/database.arr - вроде не сложно,а начал проводить аналогии со своим проектом - ничего не выходит.

Попробовал написать во вьшку tickets такой код:

$Contragents = Contragents::model()->findAll();


echo CHtml::activedropDownList($model, 'id', $Contragents); 
  • не работает.

Как правильно написать?

Сделайте так:


echo CHtml::activedropDownList($model, 'id', CHtml::listData(Contragents::model()->findAll(), 'id', 'title'));

[size=2]

Не учите человека плохому, данные нужно подготавливать в контроллере[size=2].[/size]

Лучше в модели, а в контроллере на худой конец.

Это простейшая выборка и не критично, если она будет в представлении. Не смотря на то, что в MVC BEST practice сказано, что view should avoid containing code that performs explicit DB queries. Such code is better placed in models,

Larry Ulman пишет:


To create a drop-down associated with another Model, you’d replace that code with:


<?php echo $form->dropDownList($model,'departmentId', CHtml::listData(Department::model()->findAll(), 'id', 'name')); ?>

оригинал: http://www.larryullman.com/2009/11/12/basic-view-edits-in-yii/

Вот тут в обсуждении принимают участие qiangxue и mdomba и тут везде в примерах такая выборка используется.

подсказали такой вариант:

$Contragents = Contragents::model()->findAll();

$list = CHtml::listData($Contragents,

            'id', 'поле таблицы которое надо выводить'); 

echo CHtml::activedropDownList($model, ‘id’, $list);

все гуд, только как тогда выводить несколько полей? к примеру у меня имя и фамилия в разных полях, а вывести нужно оба

Вы можете создать динамическое свойство. Тут описан как раз ваш случай http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/

О,спасибо,получилось!

Теперь при попытке добавить запись пишет "Контрагент cannot be blank."

Направьте в нужное русло пожалуйста

Значит это свойство записано в модели в методе rules как required


	/**

	 * @return array validation rules for model attributes.

	 */

	public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			//array('field', 'required'),

...

),

		);

	}

не,это понятно,оно и должно быть обязательным,я его заполняю…но приложение считает иначе

разобрался,спасибо!