2

同じテーブルに複数のエントリがあるフォームがあります。問題は、最後のエントリのみをデータベースに送信し、残りを送信しないことです。デバッグを使用しましたが、フォームの最後のフィールドのみが出力されます。

テーブル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'
        )
    )
)
4

1 に答える 1

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()) を使用して、複数のレコードを保存します。

于 2012-08-13T06:50:13.490 に答える