モデルを更に考える (4/7)
作成:2010-02-18 20:23
更新:2010-05-10 20:07
更新:2010-05-10 20:07
■データの更新
続いて、データの更新を考えてみましょう。データの更新は、実は既にやった「save」で行えます。そう、データを追加するときに使った、saveです。saveするデータに、IDのデータ(要するに、プライマリキーの値ですね)が設定されていた場合、そのIDのデータが無ければ新たに追加し、既にそのIDのデータがあった場合にはその内容を更新します。
したがって、更新処理そのものはそれほど難しいことはありません。注意すべきは、「更新するデータの内容を取り出して編集できるようにする」ということでしょう。データの更新をする場合は、更新するデータが画面に表示されて、それを編集して保存する――というような手順が一般的ですから。
そこで、編集するデータを取り出してフォームに設定して表示し、それが送信されたら内容を更新する、というような流れで処理できるようにしましょう。これは「edit」というアクションとして用意することにします。下のリストに、MydatasControllerに追加するeditメソッドと、「views」の「mydatas」に新たに用意する「edit.ctp」のソースコードを掲載しておきます。
ここでは、「http://localhost/cakesample/mydatas/edit?id=番号」というようにパラメータを追加してアクセスをすると、そのID番号のデータがフォームに設定された状態で表示されます。このまま内容を編集して送信すると、そのデータが更新されます。
まずテンプレートの方ですが、これはID保存用の<?php echo $form->input("id"); ?>を追加し、./editに送信するようにしておきます。面白いことに、追加したはずのIDフィールドは非表示となり画面には見えません。
editメソッドでは、フォームが送信された場合には、addと同様に$this->Mydata->save($this->data);でデータを保存しています。フォームにはIDの項目も用意されていますから、そこに設定されたIDのデータがこれで更新されます。
面白いのは、そうでない場合(つまり直接アクセスした場合)の処理です。$this->params["url"]["id"]で送られてきたIDパラメータの値を取り出したら、以下のように処理しておきます。
この$this->dataの操作は、モデルのデータとフォームヘルパーのデータをやり取りする基本として、覚えておくととても重宝するでしょう。
したがって、更新処理そのものはそれほど難しいことはありません。注意すべきは、「更新するデータの内容を取り出して編集できるようにする」ということでしょう。データの更新をする場合は、更新するデータが画面に表示されて、それを編集して保存する――というような手順が一般的ですから。
そこで、編集するデータを取り出してフォームに設定して表示し、それが送信されたら内容を更新する、というような流れで処理できるようにしましょう。これは「edit」というアクションとして用意することにします。下のリストに、MydatasControllerに追加するeditメソッドと、「views」の「mydatas」に新たに用意する「edit.ctp」のソースコードを掲載しておきます。
ここでは、「http://localhost/cakesample/mydatas/edit?id=番号」というようにパラメータを追加してアクセスをすると、そのID番号のデータがフォームに設定された状態で表示されます。このまま内容を編集して送信すると、そのデータが更新されます。
まずテンプレートの方ですが、これはID保存用の<?php echo $form->input("id"); ?>を追加し、./editに送信するようにしておきます。面白いことに、追加したはずのIDフィールドは非表示となり画面には見えません。
editメソッドでは、フォームが送信された場合には、addと同様に$this->Mydata->save($this->data);でデータを保存しています。フォームにはIDの項目も用意されていますから、そこに設定されたIDのデータがこれで更新されます。
面白いのは、そうでない場合(つまり直接アクセスした場合)の処理です。$this->params["url"]["id"]で送られてきたIDパラメータの値を取り出したら、以下のように処理しておきます。
$this->data = $this->Mydata->findById($id);これで、データベースの値がそのまま$this->dataに収められます。この$this->dataというのは、フォームヘルパーで送信されるフォームの内容が保管されている変数でした。ということは、逆にこの値を設定してやることで、次にフォームが表示されたとき、設定された内容がフォームに表示されるようにできる、ということなのです。
この$this->dataの操作は、モデルのデータとフォームヘルパーのデータをやり取りする基本として、覚えておくととても重宝するでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※editメソッドの内容 function edit(){ $this->set("page_title","Sample Add Page"); $this->set("content_header","Sample Add Page."); $this->set("content_footer","copyright SYODA-Tuyano. 2010."); if (!empty($this->data)){ $this->Mydata->save($this->data); $this->redirect("."); } else { $id = $this->params["url"]["id"]; $this->data = $this->Mydata->findById($id); } } ※edit.ctpの内容 <h1>データの追加</h1> <?php echo $form->create("Mydata",array("type"=>"post","action"=>"./edit")); ?> <?php echo $form->input("id"); ?> <?php echo $form->input("name"); ?> <?php echo $form->input("mail"); ?> <?php echo $form->input("tel"); ?> <?php echo $form->textarea("comment"); ?> <?php echo $form->end("送信"); ?>
※関連コンテンツ
「初心者のためのCakePHP 1.3 プログラミング入門」に戻る