クエリー、マジック検索、AND/OR検索 (2/3)
作成:2011-12-05 07:55
更新:2012-08-09 09:12
更新:2012-08-09 09:12
■AND/OR検索について
検索を行う時、常に1つの項目から1つの値を設定して探しだす、というような場合ばかりではありません。例えば、「この項目が〇〇で、なおかつこっちの項目が△△であるものだけを探しだす」というように、複数の条件を複合的に設定し探しだす場合もあります。
こうした検索は、「AND/OR検索」と呼ばれます。ANDは「AかつB」という条件設定、ORは「AまたはB」という条件設定を行うものです。こうした複合的に条件を設定する検索も、CakePHPでは比較的簡単に行うことができます。
利用するメソッドは「find」です。そう、検索の基本メソッドです。このfindで、第2引数に指定する検索条件に、AND/ORのための設定を用意しておけば良いのです。これは、
下に、簡単な利用例を挙げておきましょう。nameとmailの入力フィールドを用意し、名前とメールアドレスのそれぞれで検索を行います。どちらか一方だけでも合っていれば探し出します。オプションの設定を、
こうした検索は、「AND/OR検索」と呼ばれます。ANDは「AかつB」という条件設定、ORは「AまたはB」という条件設定を行うものです。こうした複合的に条件を設定する検索も、CakePHPでは比較的簡単に行うことができます。
利用するメソッドは「find」です。そう、検索の基本メソッドです。このfindで、第2引数に指定する検索条件に、AND/ORのための設定を用意しておけば良いのです。これは、
array(“ANDまたはOR” => array{こんな具合になります。キーに”AND”または”OR”を指定し、その値に連想配列を使って、項目名をキーとする値を複数用意します。これで、配列に用意した複数の検索条件をANDまたはORして検索を行うようになります。
“項目1” => “値”, “項目2” => “値”
));
下に、簡単な利用例を挙げておきましょう。nameとmailの入力フィールドを用意し、名前とメールアドレスのそれぞれで検索を行います。どちらか一方だけでも合っていれば探し出します。オプションの設定を、
$opt = array("OR" => array (このように設定してありますね。これで、nameとmailのそれぞれの条件を設定したOR検索が実行できます。findの際には、
"MySampleData.name" => $name,
"MySampleData.mail" => $mail
)
);
find('all',array('conditions' => $opt));このように、’conditions’の値として、先ほどの$optを設定してやるのです。これで複数の条件を設定した検索ができるようになります。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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 プログラミング入門」に戻る