제 생각에 문장중에 있는 CONCAT문장 중에 있는 큰따옴표(")를 파싱하면서 SQL오류가 나왔을 수도 있겠네요.
DB:raw()는 님의 경우 처럼, SELECT 문에서 컬럼의 값을 변환하거나 COUNT()와 같이 값을 계산하여야 할 경우, 입력된 SQL문을 문자열로 인식하도록 할 경우 사용 됩니다. 참고로 selectRaw()함수도 비슷한 기능을 합니다.
select()에서 DB:raw()의 사용법
DB::table('someTable') ->selectRaw('count(*), min(some_field) as someMin, max(another_field) as someMax') ->get();
selectRaw() 사용법
DB::table('someTable')->select( array( DB::raw('min(some_field) as someMin'), DB::raw('max(another_field) as someMax'), DB::raw('COUNT(*) as `count`') ) )->get()
두 문장의 경과는 같습니다.
DB:raw()는 Where절의 복잡한 조건을 주거나 할 경우에도 많이 사용됩니다. where() 함수에서 사용할 때는 파라메터 형식에 맞도록 사용하여야 합니다. 전체 문장을 사용할 경우는 whereRaw() 사용하여야 합니다.
where()에서 DB:raw()의 사용법
->where(DB::raw('DATE(date_column)'), '>', '2017-01-01')
whereRaw()사용법
->whereRaw("DATE(date_column) > '2017-01-01'")
개념은 알고 있었지만, 질문에 대답하려고 자료를 찾아보니, 저도 공부가 많이 되네요. 질문 감사합니다.
참고:
http://laraveldaily.com/select-with-dbraw-make-your-database-work/
https://stackoverflow.com/questions/34408900/laravel-selectraw-vs-dbraw
https://stackoverflow.com/questions/43110511/whereraw-vs-dbraw-in-laravel
덕분에 저도 공부가 많이 되었습니다.
자세한 설명 감사합니다.
유효해 보이는데 왜 그랬을까요? Member::select('IDX','CONCAT(FIRST_NAME, ",", LAST_NAME) AS NAME')->limit(3)→toSql(); 로 SQL 쿼리로 바꿔보시고, 출력된 쿼리문을 DB에서 직접 실행해 보시면 원인을 알 수 있을 듯 합니다.
감사합니다.
DB::raw를 사용 하지 않으면
`CONCAT(FIRST_NAME, " ", LAST_NAME) AS NAME`
요렇게 출력되네요
DB::raw 사용시
CONCAT(FIRST_NAME, " ", LAST_NAME) AS NAME
요렇게 출력됩니다.
위와 상티 사용하면 QueryException 오류가 발생합니다.
위와 같이 DB::raw를 사용 하면 정상적으로 데이터를 불러옵니다.
QueryException는 왜 나는건가요??