Cakephp: вопрос о saveall () с множественным выбором - PullRequest
0 голосов
/ 27 января 2011

Мне интересно, как лучше всего реализовать форму CakePHP, в которой 1 элемент управления является множественным выбором, а остальные - текстовыми полями или одиночными выборами, а затем данные вставляются в виде нескольких строк с помощью saveall (),Так, например, форма выбирается со следующими значениями:

текстовое поле A value = Foo

mulit-select B values ​​= США, Мексика, Канада

single = select C value= 10

и поэтому я хочу вставить эти строки в базу данных с помощью saveall (): Foo, США, 10 Foo, Мексика, 10 Foo, Канада, 10

Теперь я знаю вВ представлении добавления я могу использовать этот формат для оператора ввода:

input ('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 голосов
/ 29 января 2011

У меня есть кое-что, что работает ... Я не уверен, что в полной мере использует все "автоматические" возможности торта, но я не думаю, что это слишком запутанно.

Итак, я просто добавил следующий код в функцию добавления моего контроллера:

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
                )

        )

)
...