例えば検索窓にスペース区切りで複数の検索キーワードを入力された場合、入力された検索キーワード数分のwhere句を動的に作成する方法。
when句の中で検索キーワード数分ループしてwhere句を連結してやればOK。
// 検索窓に"abc def ghi"と入力されたとして
$word = "abc def ghi";
// 配列に変換
$ary_word = $this->_str_to_array_word($word);
// when句に検索ワードの配列を渡してやり
// foreachでループしてwhere句を連結してやれば良い
->when(!is_null($word), function($q) use ($ary_word){
foreach($ary_word as $word){
$q->where('name', 'LIKE', '%'.$word.'%');
}
})
// 配列に変換する関数 ※今回あまり関係ないけど一応
private function _str_to_array_word($word)
{
// 全角スペースを半角スペースに変換
$word = preg_replace('/ /', ' ', $word);
// 連続する半角スペースを半角スペースに変換
$word = preg_replace('/\s+/', ' ', $word);
$ary_word = explode(' ', $word);
return $ary_word;
}