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