-1

Cake php に複数の入力行を格納したいです。しかし、私はエラーが発生しています。これが私のコードです:

コントローラ::アクション:

if ($this->request->is('post')) {
    $this->OrderPlan->create();

    if ($this->OrderPlan->saveAll($this->request->data, 
            array('validation'=>false),
            array('atomic'=>true))) {

        $this->Session->setFlash(__('The order plan has been saved.'));
        return $this->redirect(array('action' => 'index'));
    } else {
        $this->Session->setFlash(__('The enquiry could not be saved. Please, try again.'));
    }
}

編集ページ:

 <?php
    $catageries = array("yarn", "knitting", "dyeing", " Compacting ");
    foreach ($catageries as $value):
?>   
        <td></td>
        <td><?php echo "$value";?></td>
        <td><?php echo $this->Form->input('work_begin_date', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'work-begin-date', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('work_end_date', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'work-end-date', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('lead_time_from_po', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'lead-time-form-po', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('po_to_be_issued_on_date', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'po-to-be-issued-on-date', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('planned_po_qty', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'planned-po-qty', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('planned_unit_rate', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'planned-unit-rate', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('po_date', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'po-date', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('po_number', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'po-number', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('party_name', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'party-name', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('actual_po_qty', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'actual-po-qty', 'wrapInput' => false)); ?></td>
        <td><?php echo $this->Form->input('actual_unit_rate', array('type' => 'text', 'class' => 'span6 datepicker', 'label' => false, 'tabindex' => '1', 'id' => 'actual_unit_rate', 'wrapInput' => false)); ?></td>
        <td>&nbsp;</td>
    </tr>

<?php endforeach; ?>
    </table>
    <?php echo $this->Form->submit(__('Save All'),array('multiple'=>'true'), array('class' => 'btn btn-info')); ?>

これにより、最後の行に 1 つのレコードのみが格納されます。残りの 3 行は保存されません。

4

2 に答える 2

1

を使用している場合Model::saveMany()、データは次のようにフォーマットする必要があります

Model =>
  0 =>
    field1 => var1
    field2 => var2
  1 =>
    field1 => var3
    field2 => var4

そのためには、フォーム フィールドに次のようなインデックスが必要です。

$this->Form->input('Model.0.field1')
$this->Form->input('Model.0.field2')
$this->Form->input('Model.1.field1')
$this->Form->input('Model.1.field2')

edit :
このようなもので元のコードを適応させることができるサンプルコード

$i = 0;
foreach($categories as $category){
    echo $this->Form->input('Model.' .$i. '.field1');
    echo $this->Form->input('Model.' .$i. '.field2');
    $i++;
}
于 2013-10-26T17:44:58.710 に答える
-1

複数の行を保存する場合は、最後に保存したアイテムの ID を設定解除する必要があります。使っ
$this->Model->save(); てから使う

 unset($this->Model->id); 
于 2013-10-26T10:20:09.677 に答える