クエリー、マジック検索、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{
“項目1” => “値”, “項目2” => “値”
));こんな具合になります。キーに”AND”または”OR”を指定し、その値に連想配列を使って、項目名をキーとする値を複数用意します。これで、配列に用意した複数の検索条件をANDまたはORして検索を行うようになります。下に、簡単な利用例を挙げておきましょう。nameとmailの入力フィールドを用意し、名前とメールアドレスのそれぞれで検索を行います。どちらか一方だけでも合っていれば探し出します。オプションの設定を、
$opt = array("OR" => array (
"MySampleData.name" => $name,
"MySampleData.mail" => $mail
)
);このように設定してありますね。これで、nameとmailのそれぞれの条件を設定したOR検索が実行できます。findの際には、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 プログラミング入門」に戻る