Cakephp: вопрос о saveall () с множественным выбором

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

текстовое поле Значение = Foo

множественный выбор значений B = США, Мексика, Канада

single = выберите значение C = 10

и поэтому я хочу вставить эти строки в базу данных с помощью saveall (): Foo, US, 10 Foo, Mexico, 10 Foo, Canada, 10

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

input ('Модель.0.field1', ...)

но мне интересно, могу ли я смешать это в той же форме с входными данными, отформатированными как input ('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, который реструктурирует массив.


person opike    schedule 27.01.2011    source источник


Ответы (1)


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

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

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
                )

        )

)
person opike    schedule 28.01.2011