Нужен список с множественным выбором - в yii
Мне нужно список множественного выбора в yii, у меня есть код области формы, но его сохранение в базе данных в виде слова "Массив" в поле, Как решить эту проблему?
как вернуться при просмотре и обновлении, а также при просмотре сетки
<?php echo $form->dropDownList($model,'clients',
CHtml::listData(client::model()->findAll(array('order'=>'id')), 'id', 'name'),
array('empty'=>'','multiple'=>'multiple','style'=>'width:400px;','size'=>'10'));
?>
Спасибо.
5 ответов
Для меня это работает:
'multiple'=>true
Ваш код должен быть примерно таким:
<?php echo $form->dropDownList($model,'clients',
CHtml::listData(client::model()->findAll(array('order'=>'id')), 'id', 'name'),
array('empty'=>'','multiple'=>true ,'style'=>'width:400px;','size'=>'10'));
?>
$htmlOptions = array('size' => '5', 'multiple' => 'true','style'=>'width: 333px'); $model->field_id = array_of_data_to_be_selected $form->listBox($model,'field_id',$listData, $htmlOptions);
Сохранить этот код в контроллере
$arr = implode(",",$model->attributes['hobbies']);
$model->hobbies=$arr;
в контроллере создай, обнови в первом случае если условие
в базе данных вы можете увидеть значения с запятой в качестве разделителя
Если это отношение, вы можете использовать это: http://yiiext.github.com/activerecord-relation-behavior/ который позаботится о сохранении массива в таблицу соединений многих ко многим.
В противном случае, как сказал Орлими, вам нужно сохранить каждый элемент массива путем его циклического перемещения, либо вы можете сериализовать массив или вставить его в значения, разделенные запятыми, и выполнить обратный просмотр любого метода, который вы выбрали для сохранения при просмотре.
Как это работает в CHtml::listBox()
if(!empty($htmlOptions['multiple']))
{
if(substr($name,-2)!=='[]')
$name.='[]';
}
Так что вы можете попробовать это
<?php echo $form->dropDownList($model,'clients',
CHtml::listData(client::model()->findAll(array('order'=>'id')), 'id', 'name'),
array(
>>> 'name'=>CHtml::resolveName($model, 'clients').'[]',
'empty'=>'',
'multiple'=>'multiple',
'style'=>'width:400px;',
'size'=>'10',
)
);?>
Но лучше использовать CHtml::listBox()