cakephpでブックマークアプリを作る(2)
前回までの内容で、cakephpを利用して、データベースの内容を表示するところまではできました。ブックマークアプリらしく、さらにはよくありがちな『WEBデザインのリンク集』なんかにも応用できるようになるよう、登録したURLをカテゴリ別けして、カテゴリごとに表示できるようにしてみましょう。
カテゴリー用のフィールドを追加する
ALTER TABLE `posts` ADD `category` INT NULL AFTER `url` , ADD INDEX ( `category` )
URLをカテゴリごとに振り分けするフィールドを用意します。INT型にしてINDEXも設定するといいでしょう。
データを追加する
まだデータ数が2件しかないので、表示用のデータを追加しましょう。
さきほどカテゴリーも追加しましたが、このcategoryフィールドのルールは
- 1→検索エンジン、ポータルサイト
- 2→ブログ
とでもしておきましょうか
INSERT INTO `bookmark`.`posts` ( `id` , `title` , `url` , `category` , `created` , `modified` ) VALUES ( NULL , 'コリス', 'http://coliss.com/', '1', '2011-02-23 13:21:33', NULL ), ( NULL , 'CREAMU', 'http://blog.creamu.com/mt/', '1', '2011-02-23 13:23:36', NULL ), ( NULL , 'ITかあさん', 'http://www.kaasan.info/', '1', '2011-02-23 13:23:50', NULL );
(強制はしませんが、ITかあさんも追加してくれると嬉しいです。)
前回までに登録したデータのcategoryフィールドはまだNULLなので、カテゴリのデータを追加してあげてください。
UPDATE `bookmark`.`posts` SET `category` = '0' WHERE `posts`.`id` =1 LIMIT 1 ; UPDATE `bookmark`.`posts` SET `category` = '0' WHERE `posts`.`id` =2 LIMIT 1 ;
なぜ`category` = ‘0’ と、1からではなく、0から始まっているかというと、Cakephpのフォームヘルパーで仮にプルダウンを作ると、
デフォルトでは0から始まるからなのです。ま、当面なんでもデフォルトでいきましょう。
これで今回の内容に必要なデータが揃いました。
category = 0だけを出力する
今回の覚える内容はcakephpのconditionsの話です。conditionsを設定すると、前回はデータベースに登録してある内容をすべて表示しましたが、条件を絞ってデータを表示する、というものです。SQLで言う、WHEREにあたる部分です。
PostsController
<?php
class PostsController extends AppController {var $uses = array('Post');//自分が使うmodelを配列で書きます。今回はひとつだけ
function index($id = null) {
$con = array('conditions'=>
array('Post.category'=>1)
);$post = $this->Post->find('all',$con);
debug($post);
$this->set('posts',$post);//SmartyのAssignと同じ。viewに出力用の変数として渡します
}}
?>
追加・変更になったのは赤字の部分だけ。すると、debug($post);の結果が変わりましたね
Array ( [0] => Array ( [Post] => Array ( [id] => 1 [title] => Yahoo [url] => http://www.yahoo.co.jp [category] => 0 [created] => 2011-02-18 14:34:44 [modified] => ) ) [1] => Array ( [Post] => Array ( [id] => 2 [title] => Google [url] => http://www.google.co.jp/ [category] => 0 [created] => 2011-02-18 14:35:11 [modified] => ) ) )
[category] => 0
の条件のものだけが無事出力されましたね。
この conditionsには色々ありまして、例えばOR検索、AND検索、LIKE検索も条件が複合検索になっても当然OKです。
順番を入れ替えてみる
CakephpでWHEREができるということは、ORDER BYもできるんです。とっても簡単!
PostsController
<?php
class PostsController extends AppController {var $uses = array('Post');
function index($id = null) {
$con = array('conditions'=>
array('Post.category'=>1)
'order' => array('Post.id DESC'),
);$post = $this->Post->find('all',$con);
debug($post);
$this->set('posts',$post);
}}
?>
これだけで降順になりました!簡単!WHEREと同様に複合的に順番を入れかえることもできます。
今日の分は、前回の続きなので、PostsControllerのファイルだけをあげておきますね。
ダウンロードはこちら
次回はこのカテゴリをページごとに別けたいと思います。
今日のまとめ
$conditions = array(‘conditions’=>array(‘Post.category’ =>1),
‘order’ => array(‘Post.id DESC’),
);
これで条件も、ソートもばっちり!
どうでもいいですが、私の文章や記事が明らかにCakephpの初めての記事からだいぶ『エラソー』になったのにお気づきでしょうか?
Cakephpが楽しすぎて、Cakephp初めて1ヶ月で会員サイト、携帯サイトの構築ができてしまったんです!エヘヘ。