Heim > Artikel > Backend-Entwicklung > Wie behebt man den Fehler „Ausdruck Nr. 1 der SELECT-Liste ist nicht in der GROUP BY-Klausel' in Laravel Eloquent aufgrund des strengen MySQL-Modus?
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:
<code class="php">'mysql' => [ // Disable strict mode 'strict' => false, ],</code>
Erläuterung
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 aggregierte Funktionen sind. In der bereitgestellten Abfrage:
<code class="php">$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id') ->orderBy('updated_at', 'desc') ->take(4) ->get();</code>
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.
Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Ausdruck Nr. 1 der SELECT-Liste ist nicht in der GROUP BY-Klausel' in Laravel Eloquent aufgrund des strengen MySQL-Modus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!