Laravelのwhere句でcollateを指定するには

検索機能を実装しているとき、全角半角等を無視して検索したくなった。
諸事情でデフォルトのcollateはutf8_general_ci。

普通にsqlを書くなら、

select * from items where name collate utf8_unicode_ci like '%ホゲホゲ%';

で良いけれど、Laravelのwhere句ではcollateを指定できない。

複雑なことを色々やっている人がいたけれど、一番手っ取り早いのは

where('items', 'like', '%'.$word.'%');

whereRaw('items collate utf8_unicode_ci like ?', ['%'.$word.'%'])';

と書けばOK。

コメント

タイトルとURLをコピーしました