0

複数のレコードを挿入したいのですが、私の ci=ontroller コードは次のとおりです。

if(empty($this->data) == false)
            {
                for($i=0;$i<=count($this->data['Breakdown']);$i++)
                {
                    echo count($this->data['Breakdown']);
                    $this->Breakdown->create(); 
                    if($this->Breakdown->save($this->data)) 
                    {

                         $this->Session->setFlash('Quantity Breakdown has been added Successfully.', 'default', array('class' => 'oMsg1 oMsgError1'));
                         //$this->redirect('qty_breakdown');
                    } 
                }

            }
            else
             {
              $this->set('errors', $this->Breakdown->invalidFields());   
             }

私の問題は、テキスト フィールドに値を 1 つだけ入力すると、レコードが 8 回挿入されることです。このコードを使用して完全に挿入するソリューションが必要ですか?

4

1 に答える 1

1

Model::saveMany() で複数のレコードを保存する

データを手動でループする必要はありません。CakePHP の規則に従ってフォームを作成する限り、CakePHP モデルはこれらすべてを自動的に処理できます。

FormHelper を介して適切なフォーム入力を作成する

これが正しく機能するためには、投稿されたデータが CakePHP の規則に従っている必要があります。

例: 次のようにフォーム入力を作成します。

echo $this->Form->input('Breakdown.1.field1');
echo $this->Form->input('Breakdown.1.field2');

// ....

echo $this->Form->input('Breakdown.99.field1');
echo $this->Form->input('Breakdown.99.field2');

コントローラー内で投稿されたデータをデバッグする場合、次のようになります。

debug($this->request->data);

array(
    'Breakdown' => array(
        (int) 1 => array(
            'field1' => 'value of field1 in row 1',
            'field2' => 'value of field2 in row 1'
        ),
        (int) 2 => array(
            'field1' => 'value of field1 in row 2',
            'field2' => 'value of field2 in row 2'
        )
    )
)

データの保存 - コントローラ コード

次に、コントローラー内で次のようにします。

public function qty_breakdown()
{
    $this->layout = 'common';

    if ($this->request->is('post') && !empty($this->data['Breakdown'])) {
        if ($this->Breakdown->saveMany($this->data['Breakdown'])) {
            $this->Session->setFlash(
                'Quantity Breakdown has been added Successfully.',
                'default',
                array('class' => 'oMsg1 oMsgError1')
            );
            $this->redirect('qty_breakdown');
        } else {
            // NOTE: If you're using the FormHelper, you DON'T
            // have to do this, the FormHelper will automatically
            // mark invalid fields 'invalid'
            $this->set('errors', $this->Breakdown->invalidFields());

            // However, it's Good practice to set a general error message
            $this->Session->setFlash('Unable to save your data');
        }
    }
}

ドキュメント

ドキュメントのこの部分では、Model::saveMany()について説明します

于 2013-04-15T19:54:33.763 に答える