0

I'm trying to get some data but I just get this error

SQLSTATE[42000]: Syntax error or access violation: 1055 'ms_mascotas.ms_razas.id' isn't in GROUP BY (SQL: select ms_razas.id, ms_razas.nombre, ms_mascotas.raza_id, ms_mascotas.id from ms_mascotas inner join ms_razas on ms_razas.id = ms_mascotas.raza_id where ms_razas.tipo_animal_id = 1 group by ms_mascotas.raza_id)"

my query is this

$data=Mascota::select("ms_razas.id","ms_razas.nombre","ms_mascotas.raza_id","ms_mascotas.id")
       ->join("ms_razas","ms_razas.id","=","ms_mascotas.raza_id")
       ->where("ms_razas.tipo_animal_id",$id)
       ->groupBy("ms_mascotas.raza_id")
       ->get();

I've been reading about this error and it is related with the strict mode in the database file, strict is set to false by default, what should I do?

Felipe Castillo
  • 536
  • 8
  • 25

2 Answers2

6

The problem isn't caused by laravel but this is because MySQL doesn't permit the illegal query, because in standard SQL-92, the nonaggregated name column in the select list does not appear in the GROUP BY. MySQL Handling of GROUP BY

Actually, you better solve the solution with changing the query, but if you still want to use the same query, just go to your config\database.php and change the setting the database that you use

'strict' => false
Jems
  • 1,666
  • 4
  • 20
  • 50
2

Everything you select you must add in the group by, here is an example

 Mascota::select("ms_razas.id","ms_razas.nombre","ms_mascotas.raza_id","ms_mascotas.id")
       ->join("ms_razas","ms_razas.id","=","ms_mascotas.raza_id")
       ->where("ms_razas.tipo_animal_id",$id)
       ->groupBy("ms_razas.id","ms_razas.nombre","ms_mascotas.raza_id","ms_mascotas.id")
       ->get();

You need to have a full group by:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

SQL92 requires that all columns (except aggregates) in the select clause is part of the group by clause. SQL99 loosens this restriction a bit and states that all columns in the select clause must be functionally dependent of the group by clause. MySQL by default allows for partial group by and this may produce non-deterministic answers, example:

create table t (x int, y int);
insert into t (x,y) values (1,1),(1,2),(1,3);
select x,y from t group by x;
+------+------+
| x    | y    |
+------+------+
|    1 |    1 |
+------+------+

I.e. A random y is select for the group x. One can prevent this behavior by setting @@sql_mode:

set @@sql_mode='ONLY_FULL_GROUP_BY';
select x,y from t group by x; 
ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY