Mysql
 sql >> Database >  >> RDS >> Mysql

L'errore MySQL viene generato quando viene utilizzata l'impaginazione laravel

È possibile impostare la modalità SQL ONLY_FULL_GROUP_BY in MySQL 5.6, ma non è impostata per impostazione predefinita (vedi https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).

Ah, vedo che il tuo commento è apparso sopra, hai confermato che ONLY_FULL_GROUP_BY è impostato sul tuo server locale (MySQL 5.7).

Penso che tu abbia sbagliato qualcosa nella descrizione del problema. Dovresti ricevere l'errore sul tuo server locale, ma non sul server live, se locale ha ONLY_FULL_GROUP_BY e live no.

Ti suggerisco di assicurarti di utilizzare la stessa versione in fase di sviluppo della versione che usi in produzione e di abbinare anche la stessa modalità SQL. Ciò eviterà confusione durante lo sviluppo.

Faccio lo stesso suggerimento sulla versione di PHP. Se utilizzi alcune nuove funzionalità di PHP 7 in fase di sviluppo e poi le distribuisci al tuo server live PHP 5.6, non funzioneranno.

L'SQL che descrivi dovrebbe andare bene:

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

In realtà va bene, anche se hai ONLY_FULL_GROUP_BY. È certamente legale eseguire un select count(*) di tutte le righe corrispondenti nella tabella. Non è necessaria una clausola GROUP BY per questa query.

Ma se mescoli colonne aggregate con colonne non aggregate, violeresti i requisiti ONLY_FULL_GROUP_BY, perché le colonne non aggregate sarebbero ambigue.

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

Mi chiedo se Laravel stia inserendo colonne extra nell'elenco di selezione prima di preparare la query. Dovresti abilitare il log delle query MySQL per essere sicuro.

Ho notato che c'è qualche discussione su questo errore sui problemi di Laravel:https://github.com /laravel/framework/issues/15232

La soluzione che diversi utenti in quel thread hanno detto risolve il problema è impostare 'strict'=>false nel tuo Laravel config/database.php.

Ma scommetto che la causa principale è che Laravel sta modificando la tua query SQL.