トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

CakePHP【レコード検索】

CakePHP

[PHP]
最終更新時間:2010年10月03日 15時37分12秒

レコードの検索

レコードの検索はfindメソッドを使用する。

 find(string $type, array $options)

 検索のタイプ

検索のタイプは以下のいずれかになる。

  • all:全てのレコード
  • first:最初のレコード
  • count:レコード数
  • list:リスト表示用の配列を取得
  • neighbors:前後のレコード
  • threaded:親子関係のレコード、ツリー上にネストされた配列を取得できる

all

サンプルデータ
id name
1 hoge
2 fuga
3 foo
controller
vim controller/test_controller.php
 $data = $this->Name->find('all');
 $this->set('data', $data);
views
vim views/test/index.ctp
 <h1>INDEX</h1>
 <?php
   print_r($data);
 ?>
結果
 Array(
   [0] => Array(
     [Server] => Array(
       [id] => 1,
       [name] => hoge
     )
   )
   [1] => Array(
     [Server] => Array(
       [id] => 2,
       [name] => fuga
     )
   )
   [2] => Array(
     [Server] => Array(
       [id] => 3,
       [name] => foo
     )
   )
 )

first

controllerのみ変更する。
:controller;

vim controller/test_controller.php
 $data = $this->Name->find('first');
 $this->set('data', $data);
結果
 Array(
   [Server] => Array(
     [id] => 1,
     [name] => hoge
   )
 )

count

controllerのみ変更する。
:controller;

vim controller/test_controller.php
 $data = $this->Name->find('count');
 $this->set('data', $data);
結果
2

list

controllerのみ変更する。
:controller;

vim controller/test_controller.php
 $data = $this->Name->find('list');
 $this->set('data', $data);
結果
 Array(
   [1] => 1,
   [2] => 2
 )

neighbors

:controller;

vim controller/test_controller.php
 $data = $this->Name->find('neighbors');
 $this->set('data', $data);
結果
 Array(
   [prev] => '',
   [next] => Array (
     [Server] => Array(
       [id] => 1,
       [name] => hoge
     )
   )
 )

threaded

使い方がようわからん(´・ω・`)

 検索オプション

検索のオプションを指定することでより詳細なデータを取得できる。

  • conditions:条件の指定。連想配列で定義をする。
  • fields:取得するフィールド名を配列として用意する。
  • recursive:再帰的に取得する深度
  • order:取得順。順序を示す数字または名前を配列として用意する。
  • limit:取得するレコード数
  • page:取得するページ数
  • group:Group Byする。

conditions

controller
vim controller/test_controller.php
 $option['conditios'] = Array("Name.id" => "1");
 $data = $this->Name->find('all', $option);
 $this->set('data', $data);
結果
 Array(
   [0] => Array (
     [Server] => Array(
       [id] => 1,
       [name] => hoge
     )
   )
 )
controller

IN演算子になるっぽい

vim controller/test_controller.php
 $option['conditios'] = Array("Name.id" => Array(1, 2));
 $data = $this->Name->find('all', $option);
 $this->set('data', $data);
結果
 Array(
   [0] => Array (
     [Server] => Array(
       [id] => 1,
       [name] => hoge
     )
   )
   [1] => Array (
     [Server] => Array(
       [id] => 2,
       [name] => fuga
     )
   )
 )
controller
vim controller/test_controller.php
 $option['conditios'] = Array("Name.id <>" => 1);
 $data = $this->Name->find('all', $option);
 $this->set('data', $data);

※"<>"は等しくないということをあらわす

結果
 Array(
   [0] => Array (
     [Server] => Array(
       [id] => 2,
       [name] => fuga
     )
   )
   [1] => Array (
     [Server] => Array(
       [id] => 3,
       [name] => foo
     )
   )
 )
controller
vim controller/test_controller.php
 $option['conditios'] = Array("Name.id >=" => 2);
 $data = $this->Name->find('all', $option);
 $this->set('data', $data);
結果
 Array(
   [0] => Array (
     [Server] => Array(
       [id] => 2,
       [name] => fuga
     )
   )
   [1] => Array (
     [Server] => Array(
       [id] => 3,
       [name] => foo
     )
   )
 )
controller
vim controller/test_controller.php
 $option['conditios'] = Array("Name.id between ? and ?" => array(1, 3));
 $data = $this->Name->find('all', $option);
 $this->set('data', $data);
結果
 Array(
   [0] => Array (
     [Server] => Array(
       [id] => 1,
       [name] => hoge
     )
   )
   [1] => Array (
     [Server] => Array(
       [id] => 2,
       [name] => fuga
     )
   )
   [2] => Array (
     [Server] => Array(
       [id] => 3,
       [name] => foo
     )
   )
 )

参考

<http://www.garacter.com/notes/CakePHP+Note:%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%A4%9C%E7%B4%A2/pi:206>