Нужен список с множественным выбором - в 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()

Другие вопросы по тегам