Mysql
 sql >> Base de données >  >> RDS >> Mysql

Une erreur MySQL est générée lorsque la pagination laravel est utilisée

Il est possible de définir le mode SQL ONLY_FULL_GROUP_BY dans MySQL 5.6, mais il n'est pas défini par défaut (voir https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).

Aha, je vois que votre commentaire est apparu ci-dessus, vous avez confirmé que ONLY_FULL_GROUP_BY est défini sur votre serveur local (MySQL 5.7).

Je pense que vous avez mal énoncé quelque chose dans la description de votre problème. Vous devriez obtenir l'erreur sur votre serveur local, mais pas sur le serveur live, si local a ONLY_FULL_GROUP_BY et live non.

Je vous suggère de vous assurer d'utiliser la même version en développement que la version que vous utilisez en production, et également de correspondre au même mode SQL. Cela évitera toute confusion lors du développement.

Je fais la même suggestion à propos de la version de PHP. Si vous utilisez de nouvelles fonctionnalités PHP 7 en développement, puis que vous les déployez sur votre serveur live PHP 5.6, elles ne fonctionneront pas.

Le SQL que vous décrivez devrait convenir :

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

C'est en fait correct, même si vous avez ONLY_FULL_GROUP_BY. Il est certainement légal de faire un select count(*) de toutes les lignes correspondantes du tableau. Vous n'avez pas besoin d'une clause GROUP BY pour cette requête.

Mais si vous mélangez des colonnes agrégées avec des colonnes non agrégées, vous enfreindriez les exigences de ONLY_FULL_GROUP_BY, car les colonnes non agrégées seraient ambiguës.

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

Je me demande si Laravel insère des colonnes supplémentaires dans votre liste de sélection avant de préparer la requête. Vous devez activer le journal des requêtes MySQL pour en être sûr.

Je remarque qu'il y a une discussion de cette erreur sur les problèmes de Laravel :https://github.com /laravel/framework/issues/15232

La solution que plusieurs utilisateurs de ce fil ont déclaré résoudre le problème consiste à définir 'strict'=>false dans votre configuration Laravel/database.php.

Mais je parierais que la cause première est que Laravel modifie votre requête SQL.