0

I am trying to execute some raw queries in laravel 5.3. the queries are simple but im getting errors.

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

my query:

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

This raw query works fine when I execute this on phpmyadmin. But when I execute this using laravel's database query builder i get error.

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

here is my controller:

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

Please correct me if Im wrong. Are there any better ways to execute raw queries?

Noob Coder
  • 2,816
  • 8
  • 36
  • 61

1 Answers1

0

First, you need to understand the error you're getting. This question is all about it https://stackoverflow.com/a/38551525/2474872

Now, with that in mind you have two choices

  • Disable only_full_group_bysetting.
  • Follow the indications provided by the error message:

      $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') can also be groupBy(DB::raw('MONTH(created_at), created_at')

Community
  • 1
  • 1
Frondor
  • 3,466
  • 33
  • 45