2010-01-28 71 views
2

我试图将记录保存到表中以及相关记录。主表被称为引号,它有一个hasmany链接到表quote_items。 quote_items属于报价CakePHP saveAll()函数问题

当我尝试并保存它时将记录保存在报价中,但不保存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

在此先感谢

回答

3

构建形成正确的方法是:

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)。此外,由于报价hasMany QuoteItems,QuoteItem数组需要包括许多QuoteItem数组。希望这是有道理的。 :)

+0

使完美的感觉,当我打算修复它时,我来了如此接近,但我没有采取需要摆脱下划线。谢谢你:D – kwhohasamullet 2010-01-28 05:59:05