Heim >Datenbank >MySQL-Tutorial >Wie löse ich „sql_mode=only_full_group_by'-Konflikte in Laravel Eloquent-Abfragen?
Fehlerbehebung: Inkompatibel mit sql_mode=only_full_group_by in Laravel Eloquent
Beim Ausführen von Laravel Eloquent-Abfragen kann ein Fehler im Zusammenhang mit sql_mode=only_full_group_by auftreten . Dieser Fehler tritt auf, wenn eine Abfrage nicht aggregierte Spalten in der GROUP BY-Klausel enthält.
Ursache:
Der Fehler wird durch einen strikten MySQL-Modus verursacht, der alle Spalten erfordert in der SELECT-Liste, um entweder in der GROUP BY-Klausel gruppiert oder aggregiert zu werden. In der bereitgestellten Eloquent-Abfrage ist die ID-Spalte in der SELECT-Liste enthalten, aber nicht in der GROUP BY-Klausel.
Lösung:
Die bevorzugte Lösung ist Deaktivieren Sie den strikten MySQL-Modus in den Datenbankverbindungseinstellungen. Dies kann erreicht werden, indem Sie Folgendes zu Ihrer Datei config/database.php hinzufügen:
'mysql' => [ 'strict' => false, ],
Alternative Lösung:
Wenn das Deaktivieren des strengen Modus keine Option ist können Sie die Abfrage ändern, um sicherzustellen, dass alle Spalten in der SELECT-Liste entweder gruppiert oder aggregiert sind. Im Fall der Beispielabfrage kann dies erreicht werden, indem Product::raw('COUNT(*) as product_count') zur SELECT-Klausel hinzugefügt und sowohl nach store_id als auch nach id:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy(['store_id', Product::raw('id')]) ->orderBy('updated_at', 'desc') ->take(4) ->get();gruppiert wird
Das obige ist der detaillierte Inhalt vonWie löse ich „sql_mode=only_full_group_by'-Konflikte in Laravel Eloquent-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!