Проблемы с функцией CakePHP saveAll () - PullRequest
2 голосов
/ 28 января 2010

Я пытаюсь сохранить запись в таблицу так же, как и связанную запись. Основная таблица называется кавычками и имеет множество ссылок на таблицу quote_items. quote_items принадлежат quote

Когда я пытаюсь сохранить, он сохраняет запись в цитате, но не сохраняет запись в quote_items .

Ниже моя функция добавления цитаты

    function add() {
    if (!empty($this->data)) {
        $this->Quote->create();
        if ($this->Quote->saveAll($this->data)) {
            $this->Session->setFlash(__('The Quote has been saved', true));
            //$this->redirect(array('action'=>'index'));
        } else {
            $this->Session->setFlash(__('The Quote could not be saved. Please, try again.', true));
        }
    }
    $this->Quote->recursive = 2;
    $statuses = $this->Quote->Status->find('list');
    $contacts = $this->Quote->Contact->find('list');
    $this->set(compact('statuses', 'contacts'));
}

Просмотр цитаты / настройка формы

    <?php echo $form->create('Quote', array('action' => 'add'));?>
    <fieldset>
        <legend><?php __('Add Quote');?></legend>
    <?php
        echo $form->input('Quote.name');
        echo $form->input('Quote.revision');
        echo $form->input('Quote.status_id');
        echo $form->input('Quote.contact_id');
        echo $form->input('quote_item.product_id');
        echo $form->input('quote_item.name');
        echo $form->input('quote_item.price');
        echo $form->input('quote_item.description');
        echo $form->input('Quote.totalcost');
    ?>
    </fieldset>
<?php echo $form->end('Submit');?>

Массив, который возвращается при отправке формы

    Array ( 
    [quote] => Array ( 
                [name] => Test 
                [revision] => 1 
                [status_id] => 1 
                [contact_id] => 1 
                [totalcost] => 123 
              ) 

    [quote_item] => Array ( 
                [product_id] => 1
                [name] => test 
                [price] => 123 
                [description] => tes 1234 
              ) 
) 

Кажется, что это точно соответствует тому, что указано в документации к CakePHP, поэтому я не могу понять, почему он не работает - http://book.cakephp.org/view/84/Saving-Related-Model-Data-hasOne-hasMany-belongsTo

Заранее спасибо

1 Ответ

3 голосов
/ 28 января 2010

Правильный способ построения формы будет:

echo $form->input('Quote.name');
...
echo $form->input('QuoteItem.0.product_id');
echo $form->input('QuoteItem.0.name');
...
echo $form->input('QuoteItem.1.product_id');
echo $form->input('QuoteItem.1.name');

Полученный массив должен выглядеть так:

array(
    'Quote' => array(
        'name' => 'Test'
        ....
    ),
    'QuoteItem' => array(
        0 => array(
            'product_id' => 1
            'name' => 'test'
            ...
        )
        1 => array(
            'product_id' => 2
            'name' => 'test'
            ...
        )
    )
)

В соответствии с соглашениями об именах имена моделей верблюжьими (ModelName, а не model_name). Кроме того, поскольку Quote hasMany QuoteItems, массив QuoteItem должен состоять из множества массивов QuoteItem. Надеюсь, что это имеет смысл. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...