Yii2 - 数据库

时间:2017-08-09 10:00:21

标签: yii2 active-form

在我的数据库结构中

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

然后有一个模型

* @property string $service_request

然后在我看来

<?= $form->field($model, 'service_request')->checkBoxList([ 'towel' => 'Towel', 'tissue' => 'Tissue', 'napkin' => 'Napkin']) ?>
然后,当我选择毛巾,纸巾和餐巾纸然后提交表格时,它有错误说

  

服务请求必须是字符串

请帮帮我

谢谢

3 个答案:

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