2012-08-13 119 views
2

我有一個表有多個條目到同一個表,我遇到的問題是它只發送最後一個條目到數據庫,並不發送其餘的。我已經使用了調試,它只打印出窗體中的最後一個字段。保存數組到數據庫cakephp

隨着field每次迭代它的意思輸入到fields_invoicesinvoice_id, field_id, entered_value

這裏是我的形式

<?php echo $this->Form->create('FieldsInvoice'); ?> 
    <?php foreach ($fields as $field): ?> 
    <?php echo $this->Form->hidden('FieldsInvoice.id'); ?> 
    <?php echo $this->Form->hidden('FieldsInvoice.field_id', array('default' =>$field['Field']['id'])); ?> 
    <?php echo $this->Form->input('FieldsInvoice.invoice_id', array('default' =>$invoice_id, 'type'=>'hidden')); ?> 
    <?php echo $this->Form->Input('FieldsInvoice.entered_value', array('label'=>$field['Field']['name'], 'default' =>$field['Field']['default_value'])); ?> 
    <?php endforeach ;?> 
    <?php echo $this->Form->End('Submit');?> 

下面是相關的控制器

public function create($id) 
    { 
    $this->set('title_for_layout', 'Create Invoice'); 
    $this->set('stylesheet_used', 'homestyle'); 
    $this->set('image_used', 'eBOXLogoHome.png'); 
    $this->layout='home_layout'; 


    if (!is_numeric($id)) throw new BadMethodCallException('I need an ID'); 
    $this->Invoice->id = $id; 
    if (!$this->Invoice->exists()) throw new NotFoundException('Invalid ID'); 

    $this->set('invoice_id',$id); 

    $names = $this->Invoice->find('list',array(
    'fields'=>array('template_id'), 
    'conditions'=>array('id'=>$id))); 

    $fields = $this->Field->find('all', array(
     'conditions'=>array(
    'template_id'=>$names))); 

    $this->set(compact('fields')); 
    $this->set(compact('invoice_id')); 

    $this->set('name',$names); 
    $this->Invoice->create(); 
    if(empty($this->data)){ 
     $this->data= $this->Field->read($id); 
    } 
    else{ 
     if($this->request->is('post')) 
     { 
      //die(debug($this->data)); 

      $this->Invoice->create(); 
      if($this->FieldsInvoice->save($this->request->data, array('deep'=>true))); 
      { 
      $this->Session->setFlash('The field has been updated'); 
      $this->redirect(array('controller'=>'invoices', 'action'=>'index')); 

      } 
      //else{ 
      $this->Session->setFlash('Could not be saved'); 
      //} 
     } 
    } 
} 









\app\Controller\InvoicesController.php (line 134) 
array(
    'FieldsInvoice' => array(
     (int) 0 => array(
      'id' => '', 
      'field_id' => '0', 
      'invoice_id' => '97', 
      'entered_value' => '1' 
     ), 
     (int) 1 => array(
      'id' => '', 
      'field_id' => '99', 
      'invoice_id' => '97', 
      'entered_value' => '2' 
     ), 
     (int) 2 => array(
      'id' => '', 
      'field_id' => '999', 
      'invoice_id' => '97', 
      'entered_value' => '3' 
     ), 
     (int) 3 => array(
      'id' => '', 
      'field_id' => '9999', 
      'invoice_id' => '97', 
      'entered_value' => '4' 
     ) 
    ) 
) 

回答

3

要發佈多個字段,使用:

foreach ($fields as $idx => $field): 
    echo $this->Form->hidden('FieldsInvoice.'.$idx.'.id'); 
    echo $this->Form->hidden('FieldsInvoice.'.$idx.'.field_id', ...); 
    ... 

然後用$this->FieldsInvoice->saveMany()(而不是->save())保存多個記錄。

+0

它沒有保存,但我已更新與我的調試 – user1393064 2012-08-13 06:59:08

+0

問題,你忘了一些點。例如,你的調試中的'3entered_value'意味着你編寫了''FieldsInvoice。'。$ idx.'entered_value'而不是'FieldsInvoice。'。$ idx。'。entered_value'。 – ori 2012-08-13 07:16:20

+0

更新了新的數組打印輸出,但是現在它沒有保存任何東西到我的數據庫。 – user1393064 2012-08-13 07:28:49