Inkompatibilität mit sql_mode=only_full_group_by in Laravel Eloquent
Es tritt der Fehler „Ausdruck Nr. 1 der SELECT-Liste ist nicht in der GROUP BY-Klausel“ auf. .“ beim Ausführen einer Eloquent-Abfrage mit Gruppierung deutet auf eine Inkompatibilität mit MySQLs sql_mode=only_full_group_by hin. Um dieses Problem zu beheben:
Deaktivieren Sie den strengen MySQL-Modus
Eine Lösung besteht darin, die Einstellung für den strengen MySQL-Modus in Ihrer Datenbankverbindungskonfiguration zu deaktivieren. Fügen Sie in der .env-Datei von Laravel die folgende Zeile hinzu:
DB_STRICT_MODE=false
Alternativ können Sie den strikten Modus in Ihrer config/database.php-Datei konfigurieren:
'mysql' => [
// Disable strict mode
'strict' => false,
],
Erklärung
In MySQL 5.7 und höher erfordert der sql_mode=only_full_group_by-Modus, dass alle Spalten in der SELECT-Liste entweder in der GROUP BY-Klausel enthalten sind oder sein aggregierte Funktionen. In der bereitgestellten 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 Spalten-ID (Primärschlüssel) erscheint in der SELECT-Liste, ist aber nicht in der GROUP BY-Klausel enthalten. Durch Deaktivieren des strikten Modus lässt MySQL nicht aggregierte Spalten in der SELECT-Liste zu, die funktional nicht von den GROUP BY-Spalten abhängig sind.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3