2017-01-15 4 views
0

Я пытаюсь выполнить некоторые необработанные запросы в laravel 5.3. запросы просты, но я получаю ошибки.Выполнение необработанного запроса в laravel 5.3

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

мой запрос:

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

Это сырье запрос отлично работает, когда я исполню это на PHPMyAdmin. Но когда я выполняю это с помощью builder bubar базы данных larvel, я получаю ошибку.

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)) 

вот мой контроллер:

$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); 

Пожалуйста, поправьте меня, если Im неправильно. Есть ли лучшие способы выполнения необработанных запросов?

ответ

0

Во-первых, вам нужно понять ошибку, которую вы получаете. Этот вопрос все об этом https://stackoverflow.com/a/38551525/2474872

Теперь, с учетом этого у вас есть два варианта

  • Отключить only_full_group_by настройки.
  • Следуйте указаниям, предусмотренные сообщением об ошибке:

    $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')

Смежные вопросы