Maison >base de données >tutoriel mysql >Comment résoudre les conflits `sql_mode=only_full_group_by` dans les requêtes éloquentes Laravel ?

Comment résoudre les conflits `sql_mode=only_full_group_by` dans les requêtes éloquentes Laravel ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 10:12:02936parcourir

How to Resolve `sql_mode=only_full_group_by` Conflicts in Laravel Eloquent Queries?

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!

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