"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment corriger l'erreur « L'expression n° 1 de la liste SELECT n'est pas dans la clause GROUP BY » dans Laravel Eloquent en raison du mode strict de MySQL ?

Comment corriger l'erreur « L'expression n° 1 de la liste SELECT n'est pas dans la clause GROUP BY » dans Laravel Eloquent en raison du mode strict de MySQL ?

Publié le 2024-11-08
Parcourir:839

How to Fix \

Incompatibilité avec sql_mode=only_full_group_by dans Laravel Eloquent

Rencontre de l'erreur "L'expression n°1 de la liste SELECT n'est pas dans la clause GROUP BY.. . " lors de l'exécution d'une requête Eloquent avec regroupement suggère une incompatibilité avec sql_mode=only_full_group_by de MySQL. Pour résoudre ce problème :

Désactiver le mode strict MySQL

Une solution consiste à désactiver le paramètre de mode strict MySQL dans la configuration de votre connexion à la base de données. Dans le fichier .env de Laravel, ajoutez la ligne suivante :

DB_STRICT_MODE=false

Vous pouvez également configurer le mode strict dans votre fichier config/database.php :

'mysql' => [
    // Disable strict mode
    'strict' => false,
],

Explication

Dans MySQL 5.7 et versions ultérieures, le mode sql_mode=only_full_group_by nécessite que toutes les colonnes de la liste SELECT soient soit incluses dans la clause GROUP BY, soit fonctions agrégées. Dans la requête fournie :

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

L'identifiant de colonne (clé primaire) apparaît dans la liste SELECT mais n'est pas inclus dans la clause GROUP BY. En désactivant le mode strict, MySQL autorisera les colonnes non agrégées dans la liste SELECT qui ne dépendent pas fonctionnellement des colonnes GROUP BY.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729224679. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3