Cakephp:关于使用multiselect的saveall()的问题

时间:2011-01-27 18:36:27

标签: php cakephp cakephp-1.3

我想知道最简洁的方法是实现一个cakephp表单,其中1个控件是多选,其余是文本字段或单选,然后使用saveall()将数据作为多行插入。因此,例如,使用以下值选择表单:

textfield A. 值=富

多数选择B. 值= US,墨西哥,加拿大

单身=选择C. 值= 10

所以我想用saveall()将这些行插入数据库: 美孚,美国,10 富,墨西哥,10 富,加拿大,10

现在我知道在添加视图中我可以将这种格式用于输入语句:

输入('Model.0.field1',...)

但我想知道我是否可以在格式相同的输入中混合使用相同的格式 输入( 'Model.field2',...)。

更新: 当我混合并匹配单选和多选控件时,表单数据会像这样提交:

Array
(
    [Alert] => Array
        (
            [schedule_id] => 75
            [user_id] => 6
            [0] => Array
                (
                    [frequency] => Array
                        (
                            [0] => WEEKLY
                            [1] => MONTHLY
                        )

                )

            [limit_value] => .03
            [limit_adjustment] => 0
            [type] => LIMIT
            [disabled] => 0
        )

)

我尝试将该数据传递到saveall(),但它将其视为单个记录。

Update2:我认为saveAll()要求将多行数据格式化为:

Array
(
    [Article] => Array(
            [0] => Array
                (
                            [title] => title 1
                        )
            [1] => Array
                (
                            [title] => title 2
                        )
                )
)

所以看起来在提交之后我将需要一些重组数组的javascript代码。

1 个答案:

答案 0 :(得分:0)

我有一些有用的东西......我不确定它是否能充分利用蛋糕的所有“自动化”功能,但我认为它不太复杂。

所以我刚刚将以下代码添加到控制器的添加功能中:

if (!empty($this->data)) {
            //debug($this->data, true);

                       /* begin custom code */
            $multiselect = $this->data['Alert']['entity_id'];

            $tmp2 = array();
            foreach ($multiselect as $item)
            {
                $tmp = $this->data['Alert'];
                $tmp['entity_id'] = $item;
                array_push($tmp2,$tmp);

            }

            $this->data['Alert'] = $tmp2;

            debug($this->data,true);
            /* end custom code */

            $this->Alert->create();

            //restructure data





            if ($this->Alert->saveAll($this->data['Alert'])) {
                $this->Session->setFlash(__('The alert has been saved', true));
                //$this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The alert could not be saved. Please, try again.', true));
        }

并将我的数据转换为:

Array
(
    [Alert] => Array
        (
            [0] => Array
                (
                    [schedule_id] => 74
                    [entity_id] => 1
                    [user_id] => 6
                    [frequency] => HOURLY
                    [limit_value] => .02
                    [limit_adjustment] => 0
                    [type] => LIMIT
                    [disabled] => 1
                )

            [1] => Array
                (
                    [schedule_id] => 74
                    [entity_id] => 2
                    [user_id] => 6
                    [frequency] => HOURLY
                    [limit_value] => .02
                    [limit_adjustment] => 0
                    [type] => LIMIT
                    [disabled] => 1
                )

        )

)