edo1z blog

プログラミングなどに関するブログです

cakePHP - データ検索(2)

cakePHP - データ検索(1)


上記でfindの概要がわかったが、もっと色々findの使い方がある。主にオプションであるconditionsの設定の仕方である。これを色々試す。

$data = $this->Board->find('all',array('conditions'=>
 array('Board.id'=>$this->data['Board']['id'])));

これは(1)で試したコードで、Board.idが、$this->data['Board']['id']の値と等しいものを取得する。

$data = $this->Board->find('all',array('conditions'=>
 array('Board.name like'=>"%{$this->data['Board']['name']}%")));

これは、Board.nameに、%演算子で囲まれたテキストが含まれるものを取得する。

$data = $this->Board->find('all',array('conditions'=>
 array('Board.name like ?'=>array(
 "%{$this->data['Board']['name']}%"))));

これは、一つ上のコードと全く同じことが行われる。findメソッドは、キー名に含まれる「?」部分に、値として指定されている配列から順に要素を取り出しはめ込んでいく。SQL構文とこの?の仕組みを理解していれば、SQLのWHERE句で実施される全てが行えるようだ。

$data = $this->Board->find('all',array('conditions'=>
 array('Board.id between ? and ?'=>array(2,5))));

これは、最初の?に2を入れて、次の?に5を入れている。Board.idが2〜5の間のものを取得する。

$data = $this->Board->findAllById(1);

これは、○○=××であるといったシンプルな条件指定の際に利用できる、非常に簡便なメソッドである。findAllByの後にフィールド名をキャメル記法でつなげればよい。findAllById(1)というのは、idフィールドが1であるものを全て取得することになる。



$data = $this->Board->findById(1);

これは、findAllByと仕組みは同じだが、条件に合致する最初の一つを取得する。(1)記載のallとfirstの関係と同じであり出力されるデータ構造もそれとおなじである。