Comment réparer l'incompatibilité SQL_MODE=ONLY_FULL_GROUP_BY dans Laravel Eloquent ?

Linda Hamilton
Libérer: 2024-10-18 12:27:03
original
886 Les gens l'ont consulté

How to Fix SQL_MODE=ONLY_FULL_GROUP_BY Incompatibility in Laravel Eloquent?

Correction de l'incompatibilité SQL_MODE=ONLY_FULL_GROUP_BY dans Laravel Eloquent

Laravel Eloquent permet de puissantes opérations de manipulation de données, mais vous pouvez parfois rencontrer des erreurs lors de l'exécution de requêtes . L'une de ces erreurs est liée au paramètre de mode strict de MySQL, en particulier lorsque sql_mode=only_full_group_by est activé.

Erreur :

Lorsque vous exécutez une requête comme celle ci-dessous, vous pourriez obtenir une erreur :

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();
Copier après la connexion

Le message d'erreur ressemble généralement à ceci :

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)
Copier après la connexion

Solution :

La solution à ce problème L'erreur consiste à désactiver le paramètre de mode strict MySQL. Cela peut être fait dans les paramètres de connexion à la base de données de votre application Laravel :

<code class="php">'connections' => [
    'mysql' => [
        // Behave like MySQL 5.6
        'strict' => false,

        // Behave like MySQL 5.7
        'strict' => true,
    ]
]</code>
Copier après la connexion

En définissant strict sur false, vous désactivez effectivement le mode only_full_group_by et autorisez les colonnes non agrégées dans la liste SELECT.

Conseils supplémentaires :

Référez-vous au billet de blog de Matt Stauffer pour des options de configuration plus avancées liées à ce problème. La désactivation de only_full_group_by peut avoir des implications pour certains types de requêtes. Vous devez donc tenir compte des exigences de votre application avant d'apporter des modifications.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!