Dépannage incompatible avec sql_mode=only_full_group_by dans Laravel Eloquent
Lors de l'exécution de requêtes Laravel Eloquent, il est possible de rencontrer une erreur liée à sql_mode=only_full_group_by . Cette erreur se produit lorsqu'une requête contient des colonnes non agrégées dans la clause GROUP BY.
Cause :
L'erreur est provoquée par un mode MySQL strict qui nécessite toutes les colonnes dans la liste SELECT pour être soit regroupés, soit agrégés dans la clause GROUP BY. Dans la requête Eloquent fournie, la colonne id est incluse dans la liste SELECT mais n'est pas incluse dans la clause GROUP BY.
Solution :
La solution préférée est de désactivez le mode MySQL strict dans les paramètres de connexion à la base de données. Cela peut être fait en ajoutant ce qui suit à votre fichier config/database.php :
'mysql' => [ 'strict' => false, ],
Solution alternative :
Si la désactivation du mode strict n'est pas une option , vous pouvez modifier la requête pour garantir que toutes les colonnes de la liste SELECT sont regroupées ou agrégées. Dans le cas de l'exemple de requête, cela peut être réalisé en ajoutant Product::raw('COUNT(*) as product_count') à la clause SELECT et en regroupant à la fois store_id et id:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy(['store_id', Product::raw('id')]) ->orderBy('updated_at', 'desc') ->take(4) ->get();
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!