【CakePHP】複雑なキーワード検索のconditions
(投稿時のバージョン:CakePHP 1.3.6)
願望
テキストボックスに『k(空白)e』と入力すると、下のテーブルの『name』、『detail』、両方のフィールドを検索し、
『k』も『e』も含む行、すなわち<『kirumin』と『ken』が
結果として帰ってくるようなconditionsを自動生成したい。
DBテーブル名:zoo
name | detail |
---|---|
kirumin | anime |
riko | girl |
ken | boy |
find('all', array('conditions'=> ??? ));
conditionsの完成形
name,detailどちらかに『k』を含み、かつ、name,detailどちらかに『e』を含む。
$conditions = array(
'AND'=>array(
array(
'OR'=>array(
'Zoo.name LIKE'=>'%k%',
'Zoo.detail LIKE'=>'%k%'
)
),
array(
'OR'=>array(
'Zoo.name LIKE'=>'%e%',
'Zoo.detail LIKE'=>'%e%'
)
)
)
);
PHPで自動生成する
キーワードや検索するフィールドがいくつ増えても対応できるconditionsを作ります。
キーワードとフィールド、どちらも配列の形で情報を
保持しているものとします。
【コントローラ】
$conditions = array();
foreach($keywords as $i=>$keyword){
foreach($fields as $field){
$field = "Zoo.$field";
$conditions['AND'][$i]['OR']["$field LIKE"] = "%$keyword%";
}
}
$data = find('all', array('conditions'=>$conditions));