🎉
DBのデータの空白を削除して検索する(laravel)
こんにちは。
今回は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