DŮLEŽITÉ UPOZORNĚNÍ: TENTO POŽADAVEK NA STAŽENÍ BYL OPĚT VRÁCEN KVŮLI ZMĚNÁM.
Novinky v Laravelu: Agregace podle skupin
Představení seskupených agregátních metod, pozoruhodné vylepšení nástroje Laravel pro tvorbu databázových dotazů s. Žádost o stažení #53679, přispěl GromNaN. Tato aktualizace přidává nové metody pro provádění seskupených agregovaných výpočtů, díky nimž jsou databázové dotazy čistší, výraznější a snadněji se udržují.
Pochopení problému
Před touto aktualizací bylo provádění souhrnných operací, jako je např. count, sum, min, maxa avg vyžadoval kombinaci groupBy a surové výrazy. Tento přístup byl sice efektivní, ale často byl mnohomluvný a méně intuitivní. Pro vývojáře pracující na rozsáhlých nebo složitých aplikacích se takové dotazy mohly rychle stát náchylnými k chybám a hůře čitelnými.
Vezměme si tento příklad:
$salesByCategory = DB::table('sales') ->select('category_id', DB::raw('SUM(amount) as total_sales')) ->groupBy('category_id') ->get();
Tento kód je sice funkční, ale obsahuje hrubé výrazy a ruční seskupování, což může nováčky mást nebo vést k problémům s údržbou.
Zavedení skupinových agregátních metod
Díky novým metodám Laravel zjednodušuje seskupené agregační operace a zavádí následující:
countByGroupminByGroupmaxByGroupsumByGroupavgByGroup
Tyto metody zjednodušují databázové dotazy tím, že abstrahují běžné vzory do expresivních, opakovaně použitelných metod.
Příklad použití
Zde je návod, jak můžete přepsat předchozí příklad pomocí nového sumByGroup metoda:
$salesByCategory = DB::table('sales') ->groupBy('category_id') ->sumByGroup('amount');
Tento jediný řádek kódu provede stejnou operaci, ale je čitelnější a méně náchylný k chybám. Jasně vyjadřuje záměr a dodržuje filozofii elegantní syntaxe Laravelu.
Bližší pohled na jednotlivé metody
-
countByGroup: Spočítá počet záznamů v každé skupině.$counts = DB::table('users')->groupBy('status')->countByGroup(); -
minByGroup: Vyhledá minimální hodnotu v každé skupině.$minSalaries = DB::table('employees')->groupBy('department_id')->minByGroup('salary'); -
maxByGroup: Určuje maximální hodnotu v každé skupině.$maxPrices = DB::table('products')->groupBy('category_id')->maxByGroup('price'); -
sumByGroup: Vypočítá součet hodnot v každé skupině.$totalSales = DB::table('orders')->groupBy('region_id')->sumByGroup('amount'); -
avgByGroup: Vypočítá průměrnou hodnotu pro každou skupinu.$avgRatings = DB::table('reviews')->groupBy('product_id')->avgByGroup('rating');