2017-08-09 53 views
-1

在我的數據庫結構Yii2 - CheckBoxList的值存儲在數據庫

service_request type enum('towel','tissue','napkin') 

然後有一個模型

* @property string $service_request 

然後在我看來

<?= $form->field($model, 'service_request')->checkBoxList([ 'towel' => 'Towel', 'tissue' => 'Tissue', 'napkin' => 'Napkin']) ?> 

然後當我選擇毛巾,紙巾和餐巾然後提交表格,它有一個錯誤說

服務請求必須爲String

請幫我

謝謝

回答

0

請更改的CheckBoxList以單選列表,因爲選擇多個值service_request當成爲一個數組。枚舉類型只能處理字符串值。

0

像喬伊托馬斯說,checkBoxList prodices數組。 如果要保存該數據庫結構,則需要更改數據庫結構以支持一對多關係(每個$模型可以有多個service_request s)。不幸的是,Yii不擅長這種開箱即用的事情,所以你必須自己做一堆事情。

首先您需要創建一個ServiceRequest ActiveRecord。

那麼你$model需要有這樣的關係:

public function getServiceRequests() { 
    return $this->hasMany(ServiceRequest::className(), ['model_id' => 'id']; 
} 

然後在你的控制器(Model創建行動),你需要做這樣的事情:

foreach (Yii::$app->request->post('ServiceRequest',[]) as $data) { 
    $item = new ServiceRequest($data); 
    $model->link('serviceRequests', $item); 
} 

如果你想更新複選框也需要在模型更新操作中做類似的操作。

0

首先將您的存檔數據類型從enum更改爲varchar。枚舉只需要一個字符串值。 其次,你需要implode service_request數組字符串保存到數據庫。 在模型保存功能之前使用波紋管代碼:

$model->service_request = implode("," , $model->service_request); 
$model->save();