在我的数据库结构中
service_request type enum('towel','tissue','napkin')
然后有一个模型
* @property string $service_request
然后在我看来
<?= $form->field($model, 'service_request')->checkBoxList([ 'towel' => 'Towel', 'tissue' => 'Tissue', 'napkin' => 'Napkin']) ?>
然后,当我选择毛巾,纸巾和餐巾纸然后提交表格时,它有错误说
服务请求必须是字符串
请帮帮我
谢谢
答案 0 :(得分:0)
请将checkBoxList更改为radioList,因为在选择多个值时,service_request将成为一个数组。枚举类型只能处理字符串值。
答案 1 :(得分:0)
像Joji Thomas所说,checkBoxList是一个数组。 如果要保存它,则需要更改数据库结构以使其支持1对多关系(每个$ model可以有多个 service_request )。不幸的是Yii不是很擅长开箱即用,所以你必须自己做一些事情。
首先,您需要创建一个ServiceRequest
ActiveRecord。
然后你的$model
需要有如下关系:
public function getServiceRequests() {
return $this->hasMany(ServiceRequest::className(), ['model_id' => 'id'];
}
然后在您的控制器(模型创建操作)中,您将需要执行以下操作:
foreach (Yii::$app->request->post('ServiceRequest',[]) as $data) {
$item = new ServiceRequest($data);
$model->link('serviceRequests', $item);
}
如果您还要更新复选框,那么您还需要在模型更新操作中执行类似操作。
答案 2 :(得分:0)
首先将您提交的数据类型从枚举更改为varchar。枚举只接受一个字符串值。 其次,您需要将service_request数组内存到字符串以保存到db。 在模型保存功能之前使用波纹管代码:
$model->service_request = implode("," , $model->service_request);
$model->save();