Сохранение нескольких записей для нескольких моделей cakephp - PullRequest
0 голосов
/ 18 мая 2011

Эй, ребята, я очень застрял после долгой ночи.

Я создаю приложение, в котором вы можете динамически создавать меню блюд и настраивать отношения следующим образом: Menu hasMany Widget, Widget hasMany WidgetItem (и, конечно, WidgetItem принадлежит To Widget, Widget принадлежит To Menu).

Сначала создается меню, затем пользователь перенаправляется в addSectionsToMenu, где я настроил несколько виджетов (ввод заголовка), соответственно, с несколькими элементами (пунктами меню).

Мои виджеты нормально сохраняются и прикрепляются к меню, , но мои WidgetItems не сохраняются . Я уверен, что мои модели настроены нормально, и я потратил 2 часа на то, чтобы разобраться со структурой $ data. Я просто думаю, что мне нужно кое-что выяснить здесь.

Пожалуйста, помогите!

Спасибо

~ Harley

function addSectionsToMenu($menu_id = null){
    $this->layout = 'admin';
    $this->set('menu_id', $menu_id);
    $this->set('menu', $this->Widget->Menu->findById($menu_id));
    if (!$menu_id && empty($this->data)) { $this->Session->setFlash(__('Pick a menu to add to please :)', true)); }

    $saveSuccess = false;

    if(!empty($this->data['Widget'])) {
        $widget_count = 0;
        foreach($this->data['Widget'] as $widgetKey => $widget) : 
            if($this->Widget->saveAll($widget)) : $saveSuccess = true; endif;
            $widget_count++;
        endforeach;

        if ($saveSuccess) {

            $this->Session->setFlash(__($widget_count.' sections have been added to the Menu', true));
            $this->redirect(array('controller' => 'menus', 'action' => 'index'));

        } else {

            $this->Session->setFlash(__('The Menu and Sections could not be saved. Please, try again.', true));

        }
    }
}

1 Ответ

0 голосов
/ 18 мая 2011

У меня были проблемы с сохранением нескольких моделей одновременно, и я решил их, настроив параметр проверки.

$this->Invoice->saveAll($this->data, array('validate' => true))

Объяснение массива опций не имеет полного смысладля меня, но по умолчанию причиной моей вставки был сбой, потому что связанные записи не получали свой внешний ключ от вставки родительской записи.Изменение опции «first» (по умолчанию) на «true» решило проблему, и строки правильно отображаются в базе данных.

...