Maison >développement back-end >tutoriel php >Comment résoudre le conflit SQL_MODE=ONLY_FULL_GROUP_BY dans Laravel Eloquent ?

Comment résoudre le conflit SQL_MODE=ONLY_FULL_GROUP_BY dans Laravel Eloquent ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-18 12:49:301025parcourir

How to Resolve SQL_MODE=ONLY_FULL_GROUP_BY Conflict in Laravel Eloquent?

Résolution du conflit SQL_MODE=ONLY_FULL_GROUP_BY dans Laravel Eloquent

Lorsque vous utilisez Eloquent pour effectuer une requête group-by, vous pouvez rencontrer une erreur liée à paramètres incompatibles pour sql_mode=only_full_group_by. Cette erreur peut se produire lorsque des colonnes non agrégées sont incluses dans la liste SELECT et ne font pas partie de la clause GROUP BY.

Pour résoudre ce problème, vous pouvez désactiver le mode MySQL strict en définissant ce qui suit dans votre base de données fichier de configuration :

'connections' => [
    'mysql' => [
        'strict' => false,
    ]
]

En définissant 'strict' sur false, vous autorisez MySQL à se comporter comme s'il fonctionnait en mode MySQL 5.6, ce qui n'applique pas les règles de regroupement strictes imposées par sql_mode=only_full_group_by.

Vous pouvez également modifier votre requête Eloquent pour vous assurer que toutes les colonnes de la liste SELECT sont soit agrégées, soit incluses dans la clause GROUP BY. Par exemple, vous pouvez utiliser la méthode « brute » pour ajouter l'agrégation nécessaire :

$products = Product::where('status', 1)
    ->where('stock', '>', 0)
    ->where('category_id', '=', $category_id)
    ->groupBy('store_id')
    ->orderBy('updated_at', 'desc')
    ->selectRaw('*, COUNT(*) AS total_products')
    ->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