Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Fehler wird ausgegeben, wenn Laravel-Paginierung verwendet wird

Es ist möglich, den SQL-Modus ONLY_FULL_GROUP_BY in MySQL 5.6 einzustellen, aber er ist nicht standardmäßig eingestellt (siehe https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).

Aha, ich sehe Ihren Kommentar oben, Sie haben bestätigt, dass ONLY_FULL_GROUP_BY auf Ihrem lokalen Server (MySQL 5.7) eingestellt ist.

Ich glaube, Sie haben in Ihrer Problembeschreibung etwas falsch angegeben. Sie sollten den Fehler auf Ihrem lokalen Server erhalten, aber nicht auf dem Live-Server, wenn Local ONLY_FULL_GROUP_BY hat und Live nicht.

Ich schlage vor, dass Sie sicherstellen, dass Sie in der Entwicklung dieselbe Version wie in der Produktion verwenden und auch denselben SQL-Modus verwenden. Dies verhindert Verwechslungen während der Entwicklung.

Ich mache den gleichen Vorschlag über die Version von PHP. Wenn Sie einige neue PHP 7-Funktionen in der Entwicklung verwenden und diese dann auf Ihrem PHP 5.6-Live-Server bereitstellen, funktionieren sie nicht.

Das von Ihnen beschriebene SQL sollte in Ordnung sein:

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

Das ist eigentlich in Ordnung, auch wenn Sie ONLY_FULL_GROUP_BY haben. Es ist sicherlich legal, eine select count(*) durchzuführen aller übereinstimmenden Zeilen in der Tabelle. Für diese Abfrage benötigen Sie keine GROUP BY-Klausel.

Aber wenn Sie aggregierte Spalten mit nicht aggregierten Spalten mischen, würden Sie gegen die ONLY_FULL_GROUP_BY-Anforderungen verstoßen, da die nicht aggregierten Spalten mehrdeutig wären.

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

Ich frage mich, ob Laravel zusätzliche Spalten in Ihre Auswahlliste einfügt, bevor Sie die Abfrage vorbereiten. Sie müssten das MySQL-Abfrageprotokoll aktivieren, um sicherzugehen.

Mir ist aufgefallen, dass dieser Fehler bei Laravel-Problemen diskutiert wird:https://github.com /laravel/framework/issues/15232

Die Lösung, von der mehrere Benutzer in diesem Thread sagten, dass sie das Problem behebt, besteht darin, 'strict'=>false zu setzen in Ihrer Laravel-config/database.php.

Aber ich würde wetten, dass die Hauptursache darin besteht, dass Laravel Ihre SQL-Abfrage modifiziert.