Yii2-数据库中的复选框列表值存储

Yii2-数据库中的复选框列表值存储,yii2,active-form,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' => '

在我的数据库结构中

service_request type enum('towel','tissue','napkin')
那就有一个模型

* @property string $service_request
那么在我看来,

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

然后,当我选择毛巾、纸巾和餐巾纸,然后提交表格时,会出现一个错误

服务请求必须是字符串

请帮帮我


谢谢

请将复选框列表更改为radioList,因为当选择多个值时,服务请求将变成一个数组。枚举类型只能处理字符串值。

如Joji Thomas所说,复选框列表生成一个数组。 如果要保存,需要更改数据库结构,使其支持1对多关系(每个$model可以有多个service_请求)。不幸的是,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);
}

如果您也想更新复选框,那么您还需要在模型更新操作中执行类似的操作。

首先将字段数据类型从enum更改为varchar。枚举仅接受单个字符串值。 其次,您需要将服务请求数组内爆为字符串以保存到数据库。 在模型保存功能之前使用以下代码:

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