前提・実現したいこと
登録されているユーザーの読み仮名(カタカナ)を検索する際、検索フォームからひらがなを入れても検索できるようにしたい
発生している問題・エラーメッセージ
"Type error: Argument 1 passed to Illuminate\Database\Connection::prepareBindings() must be of the type array, string given, called in /home/vagrant/code/アプリ名/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 665 ◀"
該当のソースコード
$Users = DB::select('SELECT * FROM users WHERE name_kana LIKE _utf8mb4', "%$name%", 'COLLATE utf8mb4_unicode_ci');
試したこと
Mysqlでじかにsqlをたたいて書きたいsqlを確認しました
Mysqlで成功したクエリがこちらになります
SELECT * FROM users WHERE name_kana LIKE _utf8mb4'%やまだ%' COLLATE utf8mb4_unicode_ci
Laravelのクエリを下記のように書き換えてみましたがこちらもだめでした
$Users = DB::select('SELECT * FROM users WHERE name_kana LIKE _utf8mb4 ? COLLATE utf8mb4_unicode_ci', ["%$name%"]);
エラー
"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? COLLATE utf8mb4_unicode_ci' at line 1 (SQL: SELECT * FROM users WHERE name_kana LIKE _utf8mb4 %やまだ% COLLATE utf8mb4_unicode_ci) ◀"
シングルコーテーションがつくようにすればよいのかと思い下記のようにもしてみました
結果こちらです
$Users = DB::select('SELECT *FROM users WHERE name_kana LIKE _utf8mb4', '?', 'COLLATE utf8mb4_unicode_ci', ["%$name%"]);
"Type error: Argument 1 passed to Illuminate\Database\Connection::prepareBindings() must be of the type array, string given, called in /home/vagrant/code/アプリ名/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 665 ◀"
Laravelでひらがなでもカタカナでもどちらでも検索できるようにするにはどのようにしたらよいでしょうか?
補足情報(FW/ツールのバージョンなど)
Laravel5.5
Mysql
php 7
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。