Maison >développement back-end >tutoriel php >Comment résoudre le conflit SQL_MODE=ONLY_FULL_GROUP_BY dans 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!