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
Libérer: 2024-11-19 10:12:02
original
930 Les gens l'ont consulté

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,
],
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal