raw query outer left consultas php mysql laravel-5

php - query - mysql laravel



Laravel 5.4 Raw no funciona como se esperaba, pero funciona en mySQL (1)

1. MySQL : SELECT a.*,COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck FROM manifests a JOIN truck_entry_regs b ON a.id = b.manf_id LEFT JOIN truck_deliverys d ON a.id = d.manf_id WHERE a.manifest=''550/7'' GROUP BY a.id 2.Laravel 5.4 $results = DB::select(''SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck FROM manifests a JOIN truck_entry_regs b ON a.id = b.manf_id LEFT JOIN truck_deliverys d ON a.id = d.manf_id WHERE a.manifest=? GROUP BY a.id'', [''550/7''])

Tengo la misma consulta. La primera consulta funciona bien en MySQL (Sqlyog). Pero si ejecuto (segunda consulta) en mi aplicación laravel 5.4, dice:

QueryException in Connection.php line 647: SQLSTATE[42000]: Syntax error or access violation: 1055 ''dbblpa.a.port_id'' isn''t in GROUP BY (SQL: SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck FROM manifests a JOIN truck_entry_regs b ON a.id = b.manf_id LEFT JOIN truck_deliverys d ON a.id = d.manf_id WHERE a.manifest=550/7 GROUP BY a.id)

¿Cómo puedo devolver todos los datos de una tabla con cont de otras tablas después de unirme? Si agrego a.id, a.name en la selección (como seleccionar a.id, a.name, COUNT (DISTINCT b.id)) y agrego a.id y a.name en GROUP BY, entonces funciona. La pregunta si devuelvo todas las columnas de una tabla con conteo ¿debo agregar todas las columnas del grupo? ¡Sé que es extraño! Entonces, ¿cómo puedo obtener mi resultado esperado en laravel 5.4 query builder?


Laravel 5.3 y 5.4 usan el modo estricto para mysql por defecto. Eso significa que ONLY_FULL_GROUP_BY modo SQL también está habilitado. Pero si su versión de MySQL es al menos 5.7.5 puede agrupar por una clave primaria de una tabla y usar todas las columnas de esa tabla en la cláusula SELECT porque son funcionalmente dependientes de la PK.

MySQL 5.7.5 y posteriores implementan la detección de dependencia funcional. Si el modo SQL ONLY_FULL_GROUP_BY está habilitado (que es por defecto), MySQL rechaza consultas para las cuales la lista de selección, la condición HAVING o la lista ORDER BY se refieren a columnas no agregadas que no están nombradas en la cláusula GROUP BY ni dependen funcionalmente de ellas . (Antes de 5.7.5, MySQL no detecta dependencia funcional y ONLY_FULL_GROUP_BY no está habilitado de forma predeterminada.

( Manejo de MySQL de GROUP BY )

Tus opciones son:

Actualiza MySQL a al menos 5.7.5

O deshabilite el modo estricto en laravels db config ( config/database.php )

// .. ''connections'' => [ // .. ''mysql'' => [ // .. ''strict'' => false, // .. ], // .. ]

Actualizar

Malas noticias para el usuario de MariaDB (y xampp): MariaDB parece no ser compatible con la "detección de dependencia funcional" (todavía). Todo lo que pude encontrar es este boleto .