cakephpでブックマークアプリを作る(2) ITかあさん

ITかあさん

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ヶ月で会員サイト、携帯サイトの構築ができてしまったんです!エヘヘ。

初夏のJavaScript祭 in サーキュレーションビル ForPro