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();
在我的数据库结构中
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();