DeSharky
(Chukasta)
April 1, 2013, 7:16pm
1
Начал изучать 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);
Как правильно написать?
tuschkan
(O Turansky)
April 2, 2013, 7:18am
2
Сделайте так:
echo CHtml::activedropDownList($model, 'id', CHtml::listData(Contragents::model()->findAll(), 'id', 'title'));
Q-Zma
(Denis Kuznetsov)
April 2, 2013, 7:45am
3
[size=2]
tuschkan:
[/size]
Сделайте так:
echo CHtml::activedropDownList($model, 'id', CHtml::listData(Contragents::model()->findAll(), 'id', 'title'));
Не учите человека плохому, данные нужно подготавливать в контроллере[size=2].[/size]
tuschkan
(O Turansky)
April 2, 2013, 8:20am
4
Лучше в модели, а в контроллере на худой конец.
Это простейшая выборка и не критично, если она будет в представлении. Не смотря на то, что в 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 и тут везде в примерах такая выборка используется.
DeSharky
(Chukasta)
April 2, 2013, 4:38pm
5
подсказали такой вариант:
$Contragents = Contragents::model()->findAll();
$list = CHtml::listData($Contragents,
'id', 'поле таблицы которое надо выводить');
echo CHtml::activedropDownList($model, ‘id’, $list);
все гуд, только как тогда выводить несколько полей? к примеру у меня имя и фамилия в разных полях, а вывести нужно оба
tuschkan
(O Turansky)
April 2, 2013, 6:09pm
6
DeSharky:
подсказали такой вариант:
$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/
DeSharky
(Chukasta)
April 2, 2013, 7:53pm
7
О,спасибо,получилось!
Теперь при попытке добавить запись пишет "Контрагент cannot be blank."
Направьте в нужное русло пожалуйста
tuschkan
(O Turansky)
April 3, 2013, 6:25am
8
Значит это свойство записано в модели в методе 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'),
...
),
);
}
DeSharky
(Chukasta)
April 3, 2013, 5:13pm
9
не,это понятно,оно и должно быть обязательным,я его заполняю…но приложение считает иначе