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

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

作成:2011-12-05 07:55
更新:2012-08-09 09:12

■AND/OR検索について

検索を行う時、常に1つの項目から1つの値を設定して探しだす、というような場合ばかりではありません。例えば、「この項目が〇〇で、なおかつこっちの項目が△△であるものだけを探しだす」というように、複数の条件を複合的に設定し探しだす場合もあります。

こうした検索は、「AND/OR検索」と呼ばれます。ANDは「AかつB」という条件設定、ORは「AまたはB」という条件設定を行うものです。こうした複合的に条件を設定する検索も、CakePHPでは比較的簡単に行うことができます。

利用するメソッドは「find」です。そう、検索の基本メソッドです。このfindで、第2引数に指定する検索条件に、AND/ORのための設定を用意しておけば良いのです。これは、
array(“ANDまたはOR” => array{
    “項目1” => “値”, “項目2” => “値”
));
こんな具合になります。キーに”AND”または”OR”を指定し、その値に連想配列を使って、項目名をキーとする値を複数用意します。これで、配列に用意した複数の検索条件をANDまたはORして検索を行うようになります。

下に、簡単な利用例を挙げておきましょう。namemailの入力フィールドを用意し、名前とメールアドレスのそれぞれで検索を行います。どちらか一方だけでも合っていれば探し出します。オプションの設定を、
$opt = array("OR" => array (
    "MySampleData.name" => $name,
    "MySampleData.mail" => $mail
  )
);
このように設定してありますね。これで、namemailのそれぞれの条件を設定したOR検索が実行できます。findの際には、
find('all',array('conditions' => $opt));
このように、’conditions’の値として、先ほどの$optを設定してやるのです。これで複数の条件を設定した検索ができるようになります。

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

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->input('mail');
  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')) {
      $name = $this->request->data('MySampleData.name');
      $mail = $this->request->data('MySampleData.mail');
      $opt = array("OR" => array (
          "MySampleData.name" => $name,
          "MySampleData.mail" => $mail
        )
      );
      $data = $this->MySampleData->
          find('all',array('conditions' => $opt));
         $this->set('data',$data);
      }
}

※関連コンテンツ

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