Wie behebe ich die SQL_MODE=ONLY_FULL_GROUP_BY-Inkompatibilität in Laravel Eloquent?

Linda Hamilton
Freigeben: 2024-10-18 12:27:03
Original
887 Leute haben es durchsucht

How to Fix SQL_MODE=ONLY_FULL_GROUP_BY Incompatibility 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();
Nach dem Login kopieren

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)
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!