2017-12-27 3 views
0

Ich habe ein sehr, sehr seltsames Problem. Unser Team hat das für eine Weile ignoriert, weil es nichts gebrochen hat (ich weiß, keine gute Einstellung), aber ich möchte wirklich wissen, was zum Teufel ist/könnte los sein. Wir sind auf Laravel 5.2.Setzt Laravel automatisch Gruppen nach? Seltsames Verhalten Laravel toSql vs Abfrage ausgeführt wird.

Wir haben sehr lange Abfragen mit dem Laravel eloquent Query Builder erstellt. Aus irgendeinem Grund, manchmal, wenn wir eine toSql() tun, erhalten wir die Abfrage, die wir ausführen wollten. Wenn die Abfrage einfügen, werde ich einen Fehler wie diese bekommen:

Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'onion.distance' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Sonderbare Teil aber ändert nichts davon, Laravel läuft die Abfrage nur gut! Jeder hat irgendeine Idee, warum Laravel würde die Abfrage in Ordnung, aber die toSql out setzen diesen Fehler auslösen? Und wie können wir es vermeiden (abgesehen davon, dass wir manuell die Gruppierung hinzufügen).

Nicht Einfügen von Code, sofern nicht angefordert (viele bewegliche Teile zu einigen der Abfragen).

+0

nein, es fügt keine Gruppe. Fügen Sie die Abfrage hinzu. –

+0

Werfen Sie einen Blick auf https://stackoverflow.com/questions/34115174/error-related-to-only-full-group-by-when-executing-a-query-in-mysql - dies ist mit MySql-Version verbunden. –

+1

Wahrscheinlich ist strict mode in 'config/database.php' aktiviert, aber standardmäßig auf dem Server aktiviert. –

Antwort

0

Vielen Dank an Marcin Nabialek, Sie hatten 100% Recht. Laravel überschrieb die Standardkonfiguration des mysql-Servers und setzte den strikten Modus auf false. Für alle, die verwirrt war, wie ich war:

database.php

'mysql' => [ 
    'driver' => 'mysql', 
    'host' => env('DB_HOST', 'localhost'), 
    'port' => env('DB_PORT', '3306'), 
    'dump_command_timeout' => 60 * 15, // 5 minute timeout 
    'unix_socket' => env('UNIX_SOCKET', ''), 
    'database' => env('DB_DATABASE', 'forge'), 
    'username' => env('DB_USERNAME', 'root'), 
    'password' => env('DB_PASSWORD', 'mysqltest'), 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    'strict' => false, 
    'engine' => null, 
] 

Alles, was ich tun musste, war auf true gesetzt strengen

'strict' => true 
Verwandte Themen