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();
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, ] ]
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();
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!