Incompatibilité avec sql_mode=only_full_group_by dans Laravel Eloquent
Rencontre avec 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
Alternativement, vous pouvez configurer le mode strict dans votre fichier config/database.php :
<code class="php">'mysql' => [ // Disable strict mode 'strict' => false, ],</code>
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 soient des fonctions agrégées. Dans la requête fournie :
<code class="php">$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id') ->orderBy('updated_at', 'desc') ->take(4) ->get();</code>
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.
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!