Yii2 - CheckBoxList的值存储在数据库

问题描述:

在我的数据库结构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

请帮我

谢谢

请更改的CheckBoxList以单选列表,因为选择多个值service_request当成为一个数组。枚举类型只能处理字符串值。

像乔伊托马斯说,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); 
} 

如果你想更新复选框也需要在模型更新操作中做类似的操作。

首先将您的存档数据类型从enum更改为varchar。枚举只需要一个字符串值。 其次,你需要implode service_request数组字符串保存到数据库。 在模型保存功能之前使用波纹管代码:

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