🎉

DBのデータの空白を削除して検索する(laravel)

2021/11/29に公開

こんにちは。
今回はDBのデータを検索する際に、空白を無視して検索したい場合について解説します。

例えばDBにこのように、空白があったりなかったり、半角だったり全角だったりするデータが入っているとします。

ララベル 太郎
ララベル太郎
ララベル 太郎

「ララベル太郎」と検索した場合に、通常は2番目にある「ララベル太郎」の1つしかヒットしないですが、
実際は3件ともヒットさせたい場合、どうすれば良いでしょうか。

LaravelというよりはもはやSQLの話なのですが、このようにコードを書いていきます。

$query = User::query();
// DBの値で半角全角スペースが入っているものを空文字に置換して検索
$query->where(function ($query) use ($name) {
    $where = "replace(name, ' ','') like " . "'%" . $name . "%'";
    $query->whereRaw($where);
    $orWhere = "replace(name, ' ','') like " . "'%" . $name . "%'";
    $query->orWhereRaw($orWhere);
});

半角の空白を削除した場合のLIKE検索と、全角の空白を削除した場合のLIKE検索を行い、どちらかにヒットしたものを返すようにします。

これで空白があってもなくても検索に引っ掛かるようになります!

Discussion