Laravel8 where句の数が可変の場合の対処の仕方

例えば検索窓にスペース区切りで複数の検索キーワードを入力された場合、入力された検索キーワード数分の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;
}

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です