前提・実現したいこと
Laravelで一部機能のみ、Like検索時に全角半角・大文字小文字を区別せずに検索したい。
現在SQLにCOLLATE utf8mb4_unicode_ci
を含めて検索させる方法をとっているのですが、良いコードの書き方がないか知りたいです。
対象カラムのDB上の COLLATEは utf8mb4_binになっています。
発生している問題・エラーメッセージ
1. whereRawメソッドの第2引数にバインド値を入れた場合
PHP
1$search_word = "tes't"; 2User::whereRaw("name LIKE %?% COLLATE utf8mb4_unicode_ci", [$search_word])->get(); 3 4$search_word = "tes't"; 5User::whereRaw("name LIKE ? COLLATE utf8mb4_unicode_ci", ['%' . $search_word . '%'])->get();
SQL
1select * from `users` where name LIKE %tes't% COLLATE utf8mb4_unicode_ci
どちらも上記のSQLが生成され、シンタックスエラーとなってしまう。
2. 自前でエスケープした場合
PHP
1$search_word = "tes't"; 2 3$search_word = str_replace(['\', "'", '_', '%'], ['\\', "\'", '\_', '\%'], $search_word); 4User::whereRaw("name LIKE '%{$search_word}%' COLLATE utf8mb4_unicode_ci")->get();
select * from `users` where name LIKE '%tes\'t%' COLLATE utf8mb4_unicode_ci
この場合SQL自体は想定通りとなってはくれるのですが、書き方がスマートでないです。出来ればエスケープなどはフレームワークに任せたいです。
試したこと
「Laravel whereRaw like」等のキーワードでTeratailや他サイトなど検索してみましたが、有用な回答がみつかりませんでした。
補足情報(FW/ツールのバージョンなど)
Laravel 6.17.0
MariaDB 10.4.12
補足など必要であれば指摘いただければと思います。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/24 04:48