我在Cakephp表单中有一个可以有多个值的复选框。在视图中:
<?php // Multiple checkbox form
echo $this->Form->input('report_types', array(
'type'=>'select',
'label'=>'Report Type(s)',
'multiple'=>'checkbox',
'options'=>array(
'option 1'=>'option 1',
'option 2'=>'option 2',
'option 3'=>'option 3',
),
)); ?>
当我将其加载到数据库中时,它会返回“未找到列:1054未知列''字段列''数组'错误,因为它正在尝试添加一个应该是字符串的数组。
我已经尝试将数组形式的$this->request->data
的任何转换为字符串,但这会干扰我之前在表单中选择的日期(它们被存储作为数组)。
我也尝试将多个复选框字段的值转换为模型中beforeValidate()
方法中的字符串,但是当我需要'解包'时它需要太多重复并且变得混乱数据:
<?php class Request extends AppModel {
...
function beforeValidate() {
if(!empty($this->request->data['Request']['attachment_types'])) {
$this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']);
}
if(!empty($this->request->data['Request']['report_types'])) {
$this->data['Request']['report_types'] = implode(',', $this->data['Request']['attachment_types']);
}
// Am I going to have to keep adding if-statements here?
}?>
此外,!empty()
方法不起作用,因为该字段永远不会为空(由于CakePHP进行复选框输入时会自动创建隐藏字段)。
有没有人对如何将多个复选框输入提交到数据库有任何想法?这似乎是一个非常温和的要求...... CakePHP在这方面是否具有任何“自动化”技能?
答案 0 :(得分:0)
为了解决这个问题,我将数组中的数据类型更改为一个在我的数据库中定义为('option 1','option 2','option 3)
的选项的集合。如果您的数据库中没有'set'数据类型,那没关系。然后,我修改了beforeValidate()
函数来序列化数据。
<?php class Request extends AppModel {
...
function beforeValidate() {
if($this->request->data['Request']['attachment_types']!=0) {
$this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']);
}
if($this->request->data['Request']['report_types']!=0) {
$this->data['Request']['report_types'] = implode(',', $this->data['Request']['report_types']);
}
// Yes, I will just have to keep adding if-statements :(
}?>
请注意,在上面的示例中,我有两个带复选框的字段('report_types'和'attachment_types'),这解释了为什么我有两个if语句。
感谢JvO的帮助!