2017-01-15 2 views
0

laravel 5.3에서 일부 원시 쿼리를 실행하려고합니다. 쿼리는 간단하지만 오류가 발생합니다.laravel 5.3에서 원시 쿼리 실행

table name: users 
columns: id|name|email|phone|created_at|updated_at 

내 쿼리 :이 phpMyAdmin을에 실행할 때

SELECT created_at AS member_since, count(*) as row_count 
FROM users 
GROUP by MONTH(created_at); 

이 원시 쿼리가 잘 작동합니다. 하지만 laravel의 데이터베이스 쿼리 빌더를 사용하여이 작업을 실행하면 오류가 발생합니다. 임 잘못된 경우

$users = DB::table('users') 
      ->select(DB::raw('created_at AS member_since', 'count(*) AS row_count')) 
      ->groupBy(DB::raw('MONTH(created_at)')) 
      ->get(); 

return response()->json($users); 

는 제발 올바른 :

SQLSTATE[42000]: Syntax error or access violation: 1055 
'query.users.created_at' isn't in GROUP BY 
SQLSTATE[42000]: Syntax error or access violation: 1055 
    'query.users.created_at' isn't in GROUP BY (SQL: select created_at AS 
    member_since from `users` group by MONTH(created_at)) 

여기 내 컨트롤러입니다. 원시 쿼리를 실행하는 더 좋은 방법이 있습니까?

답변

0

먼저 오류를 이해해야합니다. 이 질문은 두 가지 선택

  • only_full_group_by 설정이 염두에두고, 이제 모든 것이 https://stackoverflow.com/a/38551525/2474872

    에 관한 것입니다.

  • 오류 메시지가 제공하는 지시를 따르

    $users = DB::table('users') 
        ->select(DB::raw('created_at AS member_since, count(*) AS row_count')) 
        ->groupBy(DB::raw('MONTH(created_at)'), 'created_at') 
        ->get(); 
    

groupBy(DB::raw('MONTH(created_at)'), 'created_at')도 할 수있다 groupBy(DB::raw('MONTH(created_at), created_at')

관련 문제