2

我有一个可以有多个值的 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 在这方面有任何“自动”技能吗?

4

1 回答 1

0

('option 1','option 2','option 3)为了解决这个问题,我将数组中的数据类型更改为具有在我的数据库中定义的选项的集合。如果您的数据库中没有“设置”数据类型,没关系。然后,我修改了我的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的帮助!

于 2013-01-05T02:26:50.427 回答