2017-03-11 2 views
0

저는 최신 Laravel을 사용하고 있습니다. 5.4Laravel 열의 문자열 함수 적용 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로 변환하는 특수한 기능을 사용해야합니까?

답변

5

사용 DB::raw()

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

을 그것은이 방지합니까이

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

당신은 whereRaw()이 달성하기 laravel에서 를 사용할 수 있습니다

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

같은 쿼리를 생성 할 SQL 삽입 또는 전달 된 문자열을 수동으로 이스케이프해야합니까? – dimlucas

+0

Nope. 그것도 SQL 주입에 반대하지 않습니다. – Muthu17