libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

データの追加・更新・削除 (2/3)

作成:2011-11-28 08:04
更新:2011-12-06 19:45

■データを更新する

データの更新は、実は「データの作成」がわかれば理解したも同然です。なぜなら、同じ「save」でデータの更新も行うことができるからです。saveメソッドは、プライマリキーでデータを検索し、まだデータがなければ新たに追加をし、既にそのIDのデータがあればそれを更新します。

ですから、データの更新作業そのものはsaveを呼び出すだけです。ただし、そのためには、更新するデータを何らかの形で渡さなければいけませんし、表示されるフォームにあらかじめ保存されているデータを表示させるなどの処理をしておく必要があります。

下に実際のサンプルを挙げておきました。editアクションとして、edit.ctpファイルを作成し、コントローラーにeditメソッドを追加します。ここでは、編集するデータのID番号を、URLの末尾に、
http://〇〇/edit/番号
という形で記述してアクセスをします。例えば、ID = 1のデータを編集したければ、〇〇/edit/1としてアクセスすると、ID = 1のデータがフォームに設定された状態で画面現れます。ここで内容を編集し、送信すれば、データが更新されます。

ここでは、メソッド内でレイアウト関係の設定をした後、以下のようにしてIDを設定しています。
$this->MySampleData->id = $id;
これにより、MySampleDataには指定のIDのデータが設定されます。このままフォームを送信されていなかったならば、以下のようにしてModelクラスに指定のデータを読み込み、それをrequestdataに設定します。
$this->request->data = 
    $this->MySampleData->read(null, $id);
requestdataには、既に説明したようにフォームのデータが保管されています。ここに、Modelから読み込んだデータを設定することで、画面に出力されたフォームに所定の値があらかじめ表示されるようになります。

saveの際には、フォーム送信されたかをifでチェックして処理するのですが、これは以下のように変わっています。
if ($this->request->is('post') 

$this->request->is('put'))
request”post”があるかどうかだけでなく、request”put”が存在したかどうかをチェックしています。これにより更新時のデータ保存がきちんと機能するようになります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※edit.ctp

<h1>Edit Page</h1>
<p>MySampleData Edit Form.</p>
<?php
  echo $this->Form->create('MySampleData');
  echo $this->Form->input('id');
  echo $this->Form->input('name');
  echo $this->Form->input('mail');
  echo $this->Form->input('tel');
  echo $this->Form->end('Submit');
?>


※editメソッド

  public function edit($id) {
    // レイアウト関係
    $this->layout = "Sample";
    $this->set("header_for_layout", "Sample Application");
    $this->set("footer_for_layout", 
        "copyright by SYODA-Tuyano. 2011.");
    // post時の処理
    $this->MySampleData->id = $id;
    if ($this->request->is('post') || $this->request->is('put')) {
      $this->MySampleData->save($this->request->data);
      $this->redirect(array('action' => 'index'));
    } else {
      $this->request->data = 
          $this->MySampleData->read(null, $id);
    }
  }

※関連コンテンツ

「初心者のためのCakePHP2 プログラミング入門」に戻る