Heim >Backend-Entwicklung >PHP-Tutorial >Wie behebe ich die SQL_MODE=ONLY_FULL_GROUP_BY-Inkompatibilität in Laravel Eloquent?
Behebung der SQL_MODE=ONLY_FULL_GROUP_BY-Inkompatibilität in Laravel Eloquent
Laravel Eloquent ermöglicht leistungsstarke Datenmanipulationsvorgänge, aber manchmal können beim Ausführen von Abfragen Fehler auftreten . Ein solcher Fehler hängt mit der Einstellung des strengen MySQL-Modus zusammen, insbesondere wenn sql_mode=only_full_group_by aktiviert ist.
Fehler:
Wenn Sie eine Abfrage wie die folgende ausführen, Möglicherweise erhalten Sie eine Fehlermeldung:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id') ->orderBy('updated_at', 'desc') ->take(4) ->get();
Die Fehlermeldung sieht normalerweise so aus:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'myshop.products.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select * from products where status = 1 and stock > 0 and category_id = 5 group by store_id order by updated_at desc limit 4)
Lösung:
Die Lösung hierfür Der Fehler besteht darin, die Einstellung für den strengen MySQL-Modus zu deaktivieren. Dies kann in den Datenbankverbindungseinstellungen Ihrer Laravel-Anwendung erfolgen:
<code class="php">'connections' => [ 'mysql' => [ // Behave like MySQL 5.6 'strict' => false, // Behave like MySQL 5.7 'strict' => true, ] ]</code>
Indem Sie strict auf false setzen, deaktivieren Sie effektiv den only_full_group_by-Modus und lassen nicht aggregierte Spalten in der SELECT-Liste zu.
Zusätzliche Tipps:
Weitere erweiterte Konfigurationsoptionen zu diesem Problem finden Sie im Blogbeitrag von Matt Stauffer. Das Deaktivieren von only_full_group_by kann Auswirkungen auf bestimmte Arten von Abfragen haben. Sie sollten daher die Anforderungen Ihrer Anwendung berücksichtigen, bevor Sie Änderungen vornehmen.
Das obige ist der detaillierte Inhalt vonWie behebe ich die SQL_MODE=ONLY_FULL_GROUP_BY-Inkompatibilität in Laravel Eloquent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!