2012-04-11 9 views
0

私はかなり簡単なコードを作成したいと考えています。フィールドにユーザ入力を受け入れ、その値でレコードの配列を更新します。私は、Requestオブジェクトの最小限の理解のために私がつまらないと思う。私は、インデックスビューCakePHPリクエストオブジェクトを理解していない

<div class="<?php echo $this->request->params['action']; ?>"> 

<?php 
echo $this->Form->create('Invoice', array('action' => 'edit')); 
echo $this->Form->input('id', array('type' => 'hidden')); 
echo $this->Form->input('purchaseOrderNumber'); 
echo $this->Form->submit('Update Invoices', array('div' => false, 'name' => 'submit')); 
?> 

<table> 
    <tr> 
     <th>Invoice Number</th> 
     <th>Customer Name</th> 
     <th>Invoice Date</th> 
    </tr> 

    <!-- Here is where we loop through our $invoices array, printing out invoice info --> 

    <?php foreach ($invoices as $invoice): ?> 
     <tr>   
      <td> 
       <?php echo $this->Html->link($invoice['Invoice']['invoiceNumber'], array('action' => 'edit', $invoice['Invoice']['id'])); ?> 
      </td> 
      <td> 
       <?php echo $invoice['Invoice']['customerName']; ?> 
      </td>   
      <td> 
       <?php echo $invoice['Invoice']['invoiceDate']; ?> 
      </td>   
     </tr> 
     <?php 
    endforeach; 
    echo $this->Form->end(); 
    ?> 

</table> 
</div> 

十分にシンプルでフォームを持っています。 purchaseOrderNumberから値を取得し、それを使って後続のforeach()のデータセットで返されたレコードを更新します。手がかりのためのベストなネット検索努力にもかかわらず、私はこれをどうやって見つけたのか分かりません。私の推測では、経験豊かな開発者にとっては、それについて書く必要がないことが分かりました。

ご協力いただければ幸いです。もっと説明が必要な場合は、尋ねてください。

答えて

1

私はあなたがRequestオブジェクトについて理解していないか分かりませんが、これはあなたができることです。

請求書フォームを送信した後、フォームデータはeditメソッドで利用できるようになります。更新クエリを実行するには、$this->data(読み取り専用)または$this->request->data(変更可能)をInvoicesControllerで使用できます。

$this->dataにフォームによって返されるデータは、以下の構造を有する:

array(
    'submit' => 'Update Invoices', 
    'Invoice' => array(
     'id' => '1', 
     'purchaseOrderNumber' => '3' 
    ) 
) 

あなたは明らかに、提出した値を必要としませんが、あなたはidで正しい請求書を取得するために、他のデータを使用することができますとなり、purchaseOrderNumberがと更新されます。

$update = array(
    'Invoice' => array(
    'id' => 1, 
    'purchaseOrderNumber' => 3 
) 
); 

$this->Invoice->save($update); 

他のデータと一緒にidを供給することにより、ケーキは「知っている」:これに似て

$this->Invoice->save($this->data['Invoice']); 

は、より多くの逐語的に、同等のは:

理論的な更新は、次のように構築されるだろう通常のINSERTを実行する代わりにUPDATEを使用します。

上記のコードはメモリからのもので、エラーが含まれている可能性がありますが、うまくいけば正しい方向に向けるべきです。

+0

私は確かにこのスレッドを試してみてください。ご協力いただきありがとうございます。 –

+0

私は最終的に値にアクセスする正しい方法を発見しました。 $ invoices = $ this->請求書 - >検索( 'すべて'); $ this-> set(compact( '請求書')); pr($請求書[0] ['請求書'] ['purchaseOrderNumber']);今すぐ更新を追加する必要があります –

+0

ああ、しかし、それは請求書モデルのテーブル(請求書)のデータベースクエリを実行します。私はフォームデータが必要だと仮定していました。 – mensch

関連する問題