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

モデルを更に考える (4/7)

作成:2010-02-18 20:23
更新: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 = $this->Mydata->findById($id);
これで、データベースの値がそのまま$this->dataに収められます。この$this->dataというのは、フォームヘルパーで送信されるフォームの内容が保管されている変数でした。ということは、逆にこの値を設定してやることで、次にフォームが表示されたとき、設定された内容がフォームに表示されるようにできる、ということなのです。

この$this->dataの操作は、モデルのデータとフォームヘルパーのデータをやり取りする基本として、覚えておくととても重宝するでしょう。

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

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 プログラミング入門」に戻る