由于我需要一个复选框列表,我决定使用复选框列表,但我似乎无法将值添加到数据库中,如果我使用列表它只存储列表中的第一个值而不是所有选中的复选框。
[['sort_abc'], 'string']//not working
[['sort_abc'], 'integer']//not working
<?=$form->field($model, 'sort_abc[]')->checkBoxLIst( ['1' => 'Item A', '2' => 'Item B', '3' => 'Item C'])->label($model->getAttributeLabel('sort_abc'));?>
数据库字段
sort_abc | varchar(255) | yes | NULL
另外,如何在每个复选框之前添加图像。
答案 0 :(得分:0)
Yii不会将您的数组神奇地转换为字符串或(更糟糕的)整数。您可以使用getters / setter定义的虚拟属性来简化整个过程:
public function getSortAbcArray() {
if (empty($this->sort_abs)) {
return [];
}
return explode(',', $this->sort_abc);
}
public function setSortAbcArray($value) {
$this->sort_abs = implode(',', array_filter($value));
}
然后在表单中使用此新属性:
<?= $form->field($model, 'sortAbcArray')
->checkBoxList(['1' => 'Item A', '2' => 'Item B', '3' => 'Item C'])
->label($model->getAttributeLabel('sort_abc')); ?>
在模型规则中:
['sortAbcArray', 'each', 'rule' => ['integer']]
然后$model->sortAbcArray
将值作为数组返回,将$model->sort_abc
作为字符串返回,其中值以逗号分隔。
答案 1 :(得分:0)
您无需将以下字段命名为数组:sort_abc[]
-> sort_abc
只需执行此操作,模型就会将选中的复选框值存储在其属性中。
要保存选定的值,可以在控制器中输入:
$post = Yii::$app->request->post();
if (count($post) > 0) {
$post['YourModel']['sort_abc'] = implode(",", $post['YourModel']['sort_abc']);
}
if ($model->load($post) && $model->save()) {
...
}