データの追加・更新・削除 (2/3)
作成:2011-11-28 08:04
更新:2011-12-06 19:45
更新:2011-12-06 19:45
■データを更新する
データの更新は、実は「データの作成」がわかれば理解したも同然です。なぜなら、同じ「save」でデータの更新も行うことができるからです。saveメソッドは、プライマリキーでデータを検索し、まだデータがなければ新たに追加をし、既にそのIDのデータがあればそれを更新します。
ですから、データの更新作業そのものはsaveを呼び出すだけです。ただし、そのためには、更新するデータを何らかの形で渡さなければいけませんし、表示されるフォームにあらかじめ保存されているデータを表示させるなどの処理をしておく必要があります。
下に実際のサンプルを挙げておきました。editアクションとして、edit.ctpファイルを作成し、コントローラーにeditメソッドを追加します。ここでは、編集するデータのID番号を、URLの末尾に、
ここでは、メソッド内でレイアウト関係の設定をした後、以下のようにしてIDを設定しています。
saveの際には、フォーム送信されたかをifでチェックして処理するのですが、これは以下のように変わっています。
ですから、データの更新作業そのものはsaveを呼び出すだけです。ただし、そのためには、更新するデータを何らかの形で渡さなければいけませんし、表示されるフォームにあらかじめ保存されているデータを表示させるなどの処理をしておく必要があります。
下に実際のサンプルを挙げておきました。editアクションとして、edit.ctpファイルを作成し、コントローラーにeditメソッドを追加します。ここでは、編集するデータのID番号を、URLの末尾に、
http://〇〇/edit/番号という形で記述してアクセスをします。例えば、ID = 1のデータを編集したければ、〇〇/edit/1としてアクセスすると、ID = 1のデータがフォームに設定された状態で画面現れます。ここで内容を編集し、送信すれば、データが更新されます。
ここでは、メソッド内でレイアウト関係の設定をした後、以下のようにしてIDを設定しています。
$this->MySampleData->id = $id;これにより、MySampleDataには指定のIDのデータが設定されます。このままフォームを送信されていなかったならば、以下のようにしてModelクラスに指定のデータを読み込み、それをrequestのdataに設定します。
$this->request->data =requestのdataには、既に説明したようにフォームのデータが保管されています。ここに、Modelから読み込んだデータを設定することで、画面に出力されたフォームに所定の値があらかじめ表示されるようになります。
$this->MySampleData->read(null, $id);
saveの際には、フォーム送信されたかをifでチェックして処理するのですが、これは以下のように変わっています。
if ($this->request->is('post')requestに”post”があるかどうかだけでなく、requestに”put”が存在したかどうかをチェックしています。これにより更新時のデータ保存がきちんと機能するようになります。
$this->request->is('put'))
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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 プログラミング入門」に戻る