2017-03-11 15 views
0

私は名前でユーザーを検索するための単純なクエリを作成しようとしています最新のLaravel 5.4にLaravel 5.4列に文字列関数を適用する

を使用しています。 MySQL用に作成されたクエリは、次のようになります。

SELECT * 
FROM users 
WHERE upper(name) LIKE '%FOO%'; 

私はEloquentと連携しようとしています。物事は私が試したが、失敗しました:

  1. User::where('upper(name)', 'LIKE', '%FOO%')->get()

  2. DB::table('users')->where('upper(name)', 'LIKE', '%FOO%')->get()

の両方が次のエラーで失敗:

Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'upper(name)' in 'where clause' (SQL: select * from users where upper(name) LIKE %FOO%)'

クエリが雄弁ので失敗しているようですバックワードでupper(email)ステートメントをラップします。 ks( "` "、" `")。この問題を回避する方法はありますか、または列を大文字、小文字、e.t.cに変換するために特別な機能を使用する必要がありますか?

あなたがこれを達成するためにlaravelに whereRaw()を使用することができます

答えて

5

使用DB::raw()

User::where(DB::raw('upper(name)'), 'LIKE', '%FOO%')->get() 

それはこの

"select * from `users` where upper(name) LIKE ?" 
3

User::whereRaw("upper(name) LIKE '%FOO%'") 
        ->get(); 
+0

のようなクエリを生成するであろう、これはから守るんSQLインジェクションまたは渡された文字列を手動でエスケープする必要がありますか? – dimlucas

+0

SQLインジェクションに対してもそれに対してではありません。 – Muthu17

関連する問題