我需要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'));
?>
谢谢。
是这样的:
'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 = 数组("大小" => "5", "多个" => "真","样式"=>"宽度:333px");$model->field_id = array_of_data_to_be_selected$form->listBox($model,'field_id',$listData, $htmlOptions);
如果它是一个关系,你可能想使用这个: http://yiiext.github.com/activerecord-relation-behavior/它负责将数组保存到多对多关系连接表中。
否则,就像 Orlymee 所说的那样,您需要通过循环来保存数组的每个项目,或者您可以序列化数组或将其内爆为逗号分隔的值,并在查看时执行您选择保存的任何方法的相反操作。
将此代码保存在控制器中
$arr = implode(",",$model->attributes['hobbies']);
$model->hobbies=$arr;
在控制器中创建中,在第一个 if 条件中更新
在数据库中,您可以看到以逗号作为分隔符的值
这在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()