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.
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