sql >> Base de Datos >  >> RDS >> Mysql

Se lanza un error de MySQL cuando se usa la paginación de laravel

Es posible configurar el modo SQL ONLY_FULL_GROUP_BY en MySQL 5.6, pero no está configurado de forma predeterminada (ver https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).

Ajá, veo que su comentario apareció arriba, ha confirmado que ONLY_FULL_GROUP_BY está configurado en su servidor local (MySQL 5.7).

Creo que te has equivocado en algo en la descripción de tu problema. Debería obtener el error en su servidor local, pero no en el servidor en vivo, si local tiene ONLY_FULL_GROUP_BY y en vivo no.

Le sugiero que se asegure de usar la misma versión en desarrollo que la versión que usa en producción, y que también coincida con el mismo modo SQL. Esto evitará confusiones durante el desarrollo.

Hago la misma sugerencia sobre la versión de PHP. Si usa algunas características nuevas de PHP 7 en desarrollo y luego las implementa en su servidor en vivo de PHP 5.6, no funcionarán.

El SQL que describe debería estar bien:

select count(*) as aggregate from `parameter_log_site_detail` where `site_id` = EPE

Esto está bien, incluso si tienes ONLY_FULL_GROUP_BY. Ciertamente es legal hacer un select count(*) de todas las filas coincidentes de la tabla. No necesita una cláusula GROUP BY para esta consulta.

Pero si mezcla columnas agregadas con columnas no agregadas, violaría los requisitos de ONLY_FULL_GROUP_BY, porque las columnas no agregadas serían ambiguas.

select id, count(*) as aggregate from ...

Me pregunto si Laravel está insertando columnas adicionales en su lista de selección antes de preparar la consulta. Tendría que habilitar el registro de consultas de MySQL para estar seguro.

Noté que hay alguna discusión sobre este error en los problemas de Laravel:https://github.com /laravel/framework/problemas/15232

La solución que varios usuarios en ese hilo dijeron que soluciona el problema es establecer 'strict'=>false en su Laravel config/database.php.

Pero apostaría a que la causa raíz es que Laravel está modificando su consulta SQL.