Laravel学習記録 #032 Like検索を学ぶ
LaravelでLike検索について学習したものをまとめています。
Like検索について(Eloquent、クエリビルダ)
likeメソッドはないのでwhereメソッドにlikeを指定して使います。
通常のSQL同様「%」がワイルドカードです。
$results = Hoge::where('column', 'like', '%keyword%')->get();
検索するキーワードにワイルドカード「%」「_」が含まれる場合を考慮するとエスケープが必要ですね。あと「\」も考慮します。
$keyword = 'keyword_%\\';
$escapedKeyword = str_replace(['\\', '%', '_'], ['\\\\', '\%', '\_'], $keyword);
もしくは
$escapedKeyword = addcslashes($keyword, '%_\\');
生成されるSQLを見てみる
str_replaceパターン
$keyword = 'keyword_%\\';
$escapedKeyword = str_replace(['\\', '%', '_'], ['\\\\', '\%', '\_'], $keyword);
$query = Keyword::where('keyword', 'like', '%' . $escapedKeyword .'%');
dd($query->toSql(), $query->getBindings());
結果
select * from `keywords` where `keyword` like ?
// キーワード
%keyword\_\%\\%
addcslashesパターン
$keyword = 'keyword_%\\';
$escapedKeyword = addcslashes($keyword, '%_\\');
$query = Keyword::where('keyword', 'like', '%' . $escapedKeyword .'%');
dd($query->toSql(), $query->getBindings());
結果
select * from `keywords` where `keyword` like ?
// キーワード
%keyword\_\%\\%
同じ結果になりますね。
バックスラッシュでも同じ結果になります。
この記事が気に入ったらサポートをしてみませんか?