2012-08-13 137 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