Ein häufiges Problem bei der Verwendung von Laravel Eloquent für Datenbankoperationen ist der MySQL-Fehler „Expression #1 der SELECT-Liste ist nicht in der GROUP BY-Klausel und enthält eine nicht aggregierte Spalte [...].“ Dieser Fehler tritt aufgrund des strikten MySQL-Modus „only_full_group_by“ auf.
Um das Problem zu veranschaulichen, betrachten Sie die folgende Eloquent-Abfrage:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id') ->orderBy('updated_at', 'desc') ->take(4) ->get();
Die Ausführung dieser Abfrage kann zu dem oben genannten MySQL-Fehler führen. Der Grund dafür ist, dass der only_full_group_by-Modus von MySQL erfordert, dass alle Spalten in der SELECT-Liste entweder aggregierte Funktionen (z. B. COUNT, SUM) sind oder in der GROUP BY-Klausel enthalten sind. In dieser Abfrage ist die ID-Spalte jedoch nicht in der GROUP BY-Klausel enthalten, sondern in der SELECT-Liste vorhanden.
Um dieses Problem zu beheben, besteht eine wirksame Methode darin, den strikten Modus von MySQL in den Datenbankverbindungseinstellungen zu deaktivieren :
'connections' => [ 'mysql' => [ // Disabling strict mode for MySQL 5.6 'strict' => false, ] ]
Alternativ können Sie die Spalte zur GROUP BY-Klausel hinzufügen:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id', 'id') ->orderBy('updated_at', 'desc') ->take(4) ->get();
Indem Sie den strikten Modus lockern oder anpassen Wenn Sie die Abfrage an die MySQL-Anforderungen anpassen, können Sie diesen Fehler beheben und Ihre Daten erfolgreich abrufen.
Das obige ist der detaillierte Inhalt vonWie behebe ich den MySQL-Fehler „Inkompatibel mit sql_mode=only_full_group_by' in Laravel Eloquent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!