Maison > base de données > tutoriel mysql > Comment résoudre l'erreur « Incompatible avec sql_mode=only_full_group_by » de MySQL dans Laravel Eloquent ?

Comment résoudre l'erreur « Incompatible avec sql_mode=only_full_group_by » de MySQL dans Laravel Eloquent ?

DDD
Libérer: 2024-11-22 16:16:47
original
961 Les gens l'ont consulté

How to Resolve MySQL's

Résoudre le problème « Incompatible avec sql_mode=only_full_group_by » de MySQL dans Laravel Eloquent

Un problème fréquent rencontré lors de l'utilisation de Laravel Eloquent pour les opérations de base de données est l'erreur MySQL « Expression #1 de la liste SELECT n'est pas dans la clause GROUP BY et contient une colonne non agrégée [...]." Cette erreur est due au mode strict de MySQL connu sous le nom de only_full_group_by.

Pour illustrer le problème, considérons la requête éloquente suivante :

$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

L'exécution de cette requête peut entraîner l'erreur MySQL susmentionnée. La raison en est que le mode only_full_group_by de MySQL nécessite que toutes les colonnes de la liste SELECT soient soit des fonctions agrégées (par exemple, COUNT, SUM), soit incluses dans la clause GROUP BY. Cependant, dans cette requête, la colonne id n'est pas incluse dans la clause GROUP BY mais est présente dans la liste SELECT.

Pour résoudre ce problème, une méthode efficace consiste à désactiver le mode strict de MySQL dans les paramètres de connexion à la base de données. :

'connections' => [
    'mysql' => [
        // Disabling strict mode for MySQL 5.6
        'strict' => false,
    ]
]
Copier après la connexion

Alternativement, vous pouvez ajouter la colonne à la clause GROUP BY :

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

En assouplissant le mode strict ou en ajustant le requête pour répondre aux exigences de MySQL, vous pouvez éliminer cette erreur et récupérer vos données avec succès.

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.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal