Correction de l'incompatibilité SQL_MODE=ONLY_FULL_GROUP_BY dans Laravel Eloquent
Laravel Eloquent permet de puissantes opérations de manipulation de données, mais vous pouvez parfois rencontrer des erreurs lors de l'exécution de requêtes . L'une de ces erreurs est liée au paramètre de mode strict de MySQL, en particulier lorsque sql_mode=only_full_group_by est activé.
Erreur :
Lorsque vous exécutez une requête comme celle ci-dessous, vous pourriez obtenir une erreur :
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id') ->orderBy('updated_at', 'desc') ->take(4) ->get();
Le message d'erreur ressemble généralement à ceci :
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'myshop.products.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select * from products where status = 1 and stock > 0 and category_id = 5 group by store_id order by updated_at desc limit 4)
Solution :
La solution à ce problème L'erreur consiste à désactiver le paramètre de mode strict MySQL. Cela peut être fait dans les paramètres de connexion à la base de données de votre application Laravel :
<code class="php">'connections' => [ 'mysql' => [ // Behave like MySQL 5.6 'strict' => false, // Behave like MySQL 5.7 'strict' => true, ] ]</code>
En définissant strict sur false, vous désactivez effectivement le mode only_full_group_by et autorisez les colonnes non agrégées dans la liste SELECT.
Conseils supplémentaires :
Référez-vous au billet de blog de Matt Stauffer pour des options de configuration plus avancées liées à ce problème. La désactivation de only_full_group_by peut avoir des implications pour certains types de requêtes. Vous devez donc tenir compte des exigences de votre application avant d'apporter des modifications.
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!