2017-01-10 5 views
6

Ich bin nicht in der Lage, diese einfache Abfrage in Laravel 5,3Gruppe von nicht funktioniert - Laravel

$top_performers = DB::table('pom_votes') 
     ->groupBy('performer_id') 
     ->get(); 

Es gibt mir zu laufen:

SQLSTATE[42000]: Syntax error or access violation: 1055 'assessment_system.pom_votes.id' isn't in GROUP BY (SQL: select * from `pom_votes` group by `performer_id`) 

Allerdings, wenn ich rohe Abfrage von dem Fehler zu kopieren und Feuer direkt in PhpMyAdmin, es funktioniert gut.

Ich habe bereits überprüft dies:

https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset

Jede Hilfe appricaited würde.

Danke,

Parth Vora

+0

In Ihrer Datenbank ist etwas "falsch". Wie Sie im Fehler sehen können, erwartet MySQL ein Feld 'assessment_system.pom_voted.id', das nicht vorhanden ist. – Loek

Antwort

32

Bitte Gehen Sie zu Ihrem config/database.php Ordner. Ändern Sie strict => true to strict => false in mysql configuration array und alles wird gut funktionieren.

+1

Danke eine Tonne. Das war das genaue Problem. –

+1

Wäre gut, wenn es irgendwo in der Laravel doc erwähnt wurde. –

+0

Willkommen, es ist besser als jedes Dokument https://laravel.com/docs/5.3/installation –

1

Möglicherweise liegt Ihr Problem daran, dass Sie einen MySQL-Server mit der Version 5.7.5+ verwenden. Von dieser Version auf dem Weg GROUP BY funktioniert geändert, da sie es sich verhalten, um SQL99-konform zu sein (wo es in früheren Versionen nicht war).

Versuchen Sie, eine vollständige Gruppe zu erstellen oder ändern Sie die Konfiguration Ihres MySQL-Servers.

Link offiziellen MySQL doc wo volle GROUP BY explanined ist

1

Wenn Sie falsch Strict-Modus, dann können Sie nicht andere strenge Funktionalität nutzen diese Fehler zu beheben Gehen Sie auf die Illuminate \ Database \ Connectors \ MySqlConnector.php und ändern Funktion wie folgt:

protected function strictMode() { 
return "set session 
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY 
_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'"; 
} 

Funktion mit diesem ersetzen.

+2

Bearbeiten von Anbietern sind nie eine gute Option. –

+0

großartig! Danke mann! – Amin