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

Yii2 - Checkboxlist Value Store In Database

在我的数据库结构中

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

然后有模型

* @property string $service_request

那么在我看来

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

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

Service Request must be String

请帮帮我

谢谢

请将checkBoxList改为radioList,因为选择多个值时service_request变成数组。枚举类型只能处理字符串值。

正如 Joji Thomas 所说,checkBoxList 生成一个数组。 如果你想保存这个,你需要改变你的数据库结构,使其支持一对多关系(每个 $model 可以有多个 service_requests)。不幸的是,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);
}

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

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

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