2012-05-24 23 views
3

我需要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')); 
?> 

謝謝。

+2

它以數組形式保存在數據庫中,因爲多個select將返回一個數組。循環訪問數組以提取值,然後相應地保存它們,無論是作爲多個條目還是逗號分隔值 – Orlymee

回答

0

如果它是一個關係,你可能想要使用這個:http://yiiext.github.com/activerecord-relation-behavior/它照顧到保存數組到多對多關係連接表。否則,就像Orlymee說的那樣,你需要通過遍歷它來保存數組中的每一項,或者你可以序列化數組或者將它分解爲逗號分隔值,並且在查看時選擇保存的方法。

0

保持這種代碼在控制器

$arr = implode(",",$model->attributes['hobbies']); 

$model->hobbies=$arr; 

在CONTROLER創建,更新第一,如果條件

在數據庫中,您可以看到與逗號值分隔符

+0

感謝您的回答,我的主要問題是int view/_form page,我如何在更新時重新選擇回來。因爲所有的值都以逗號分隔,我可以爆炸它也沒有問題,但是,我不知道如何我可以自動重新選擇,而更新.. – bala

3

對我的作品這樣的:

'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')); 
?> 
0
 

$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); 

0

這是如何工作了CHtml ::列表框()

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 ::列表框( )