Maison  >  Article  >  développement back-end  >  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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-18 12:29:03551parcourir

How to Fix

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!

Déclaration:
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