sql >> Database >  >> RDS >> Mysql

MySQL-fout wordt gegenereerd wanneer laravel-paginering wordt gebruikt

Het is mogelijk om de SQL-modus ONLY_FULL_GROUP_BY in MySQL 5.6 in te stellen, maar dit is niet standaard ingesteld (zie https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).

Aha, ik zie dat je opmerking hierboven verscheen, je hebt bevestigd dat ONLY_FULL_GROUP_BY is ingesteld op je lokale server (MySQL 5.7).

Ik denk dat je iets verkeerd hebt aangegeven in je probleembeschrijving. Je zou de fout op je lokale server moeten krijgen, maar niet op de live server, als local ONLY_FULL_GROUP_BY heeft en live niet.

Ik raad u aan ervoor te zorgen dat u tijdens de ontwikkeling dezelfde versie gebruikt als de versie die u in de productie gebruikt, en dat u dezelfde SQL-modus gebruikt. Dit voorkomt verwarring tijdens de ontwikkeling.

Ik doe dezelfde suggestie over de versie van PHP. Als je een aantal nieuwe PHP 7-functies in ontwikkeling gebruikt en vervolgens implementeert op je PHP 5.6 live-server, zullen ze niet werken.

De SQL die je beschrijft zou in orde moeten zijn:

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

Dit is eigenlijk oké, zelfs als je ONLY_FULL_GROUP_BY hebt. Het is zeker legaal om een ​​select count(*) te doen van alle overeenkomende rijen in de tabel. U hebt geen GROUP BY-clausule nodig voor deze zoekopdracht.

Maar als u geaggregeerde kolommen combineert met niet-geaggregeerde kolommen, zou u de ONLY_FULL_GROUP_BY-vereisten schenden, omdat de niet-geaggregeerde kolommen dubbelzinnig zouden zijn.

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

Ik vraag me af of Laravel extra kolom(men) aan je selectielijst toevoegt voordat de query wordt voorbereid. U moet het MySQL-querylogboek inschakelen om zeker te zijn.

Ik merk dat er enige discussie is over deze fout over Laravel-problemen:https://github.com /laravel/framework/issues/15232

De oplossing die volgens verschillende gebruikers in die thread het probleem oplost, is om 'strict'=>false in te stellen in uw Laravel config/database.php.

Maar ik durf te wedden dat de hoofdoorzaak is dat Laravel je SQL-query aan het wijzigen is.




  1. AUTONOMOUS_TRANSACTION

  2. SQL Server:VERWIJDEREN vs TRUNCATE

  3. Draai MySQL-tabel met dynamische kolommen

  4. MySQL-resultaten correct vergelijken en uitsluiten