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

クエリー、マジック検索、AND/OR検索 (1/3)

作成:2011-12-05 07:52
更新:2011-12-06 19:53

■マジック検索とは?

データベースを利用する時、そのアクセスの9割は「検索」といっていいでしょう。データの追加や更新などは、そう頻繁に行うものでもありませんが、検索は、そのデータをブラウズする際、常に必要となることが多いものです。

既に検索の機能としては、「find」および「findAll」メソッドを使ったやり方について説明しました。これらはfindの基本機能をひと通り備えており、十分ではあるのですが、正直、利用が面倒くさいのも確かです。ごく単純に、「name項目の値が”Hanako”のデータを探す」というような場合でも、検索の諸設定を連想配列で用意して……となってしまいます。

こうした複雑な検索でない、単純に「この項目がこの値のやつを取ってきて!」というようなシンプルな検索であれば、実はもっと非常に簡単に行う方法が用意されています。それは「マジック検索Magic Find)」と呼ばれる機能です。

マジック検索は、特定の項目の値を指定して検索をするためのシンプルな手段です。CakePHPのModelクラスには、テーブル内の項目名ごとにマジック検索のメソッドが用意されています。これは、
$変数 = $this->Modelクラス->findBy項目名( 検索する値 );
このような形で実装されています。例えば、nameという項目であれば、「findByName」というメソッドが用意されるわけです。引数に値を指定すれば、その項目がその値のものだけを検索します。例えば、findByName(‘taro’)とすれば、nameの項目がtaroのものだけを検索してくれる、というわけです。

このfindBy〜は、複数の項目を見つけた場合、一番最初のもの1つだけを返します。つまり、常に取り出されるのは「1つだけ」なのです。――同様のものに、「findAllBy項目名」というものも用意されています。
$変数 = $this->Modelクラス->findAllBy項目名( 検索する値 );
これはfindBy〜とほぼ同じものですが、複数項目があった場合、すべてを取り出し返します。両者を必要に応じて使い分けると良いでしょう。

では、下に利用例を挙げておきましょう。findアクションとして用意してあります。例によって、独自作成のレイアウトを使うようにしてありますので、不要の場合はアクションメソッドのレイアウト関係の処理を削除してください。

これは、nameからテキストを検索してデータを表示するものです。入力フォームに名前を書いて検索すると、その項目を表示します。非常にシンプルなコードになっていることがわかるでしょう。

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

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※find.ctp

<h1>Index Page</h1>
<p>MySampleData Find View.</p>
<?php
  echo $this->Form->create('MySampleData');
  echo $this->Form->input('name');
  echo $this->Form->end('Submit');
?>

<?php if (isset($data)): ?>
  <pre><?php print_r($data); ?></pre>
<?php endif; ?>


※findメソッド

  public function find(){
    // レイアウト関係
    $this->layout = "Sample";
    $this->set("header_for_layout", "Sample Application");
    $this->set("footer_for_layout", 
        "copyright by SYODA-Tuyano. 2011.");
    // post時の処理
    if ($this->request->is('post')) {
      $data = $this->MySampleData->findByName($this->
          request->data('MySampleData.name'));
      $this->set('data',$data);
    }
  }

※関連コンテンツ

「初心者のためのCakePHP2 プログラミング入門」に戻る