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