فهرست منبع

refactor(franchisor-dashboard): optimize enrollments query and sort birthdays

ebagabee 1 ماه پیش
والد
کامیت
9bda05605f
1فایلهای تغییر یافته به همراه12 افزوده شده و 5 حذف شده
  1. 12 5
      app/Services/FranchisorDashboardService.php

+ 12 - 5
app/Services/FranchisorDashboardService.php

@@ -48,13 +48,19 @@ private function enrollments(array $unitIds): array
     {
     {
         $start = Carbon::now()->startOfMonth()->subMonthsNoOverflow(5);
         $start = Carbon::now()->startOfMonth()->subMonthsNoOverflow(5);
 
 
-        $counts = DB::table('students')
+        // Agrupa por ano-mês de forma portável (independente do SGBD): puxa apenas
+        // a data de cadastro no período e conta os meses em memória.
+        $createdAt = DB::table('students')
             ->whereNull('deleted_at')
             ->whereNull('deleted_at')
             ->where('created_at', '>=', $start)
             ->where('created_at', '>=', $start)
             ->when(!empty($unitIds), fn ($q) => $q->whereIn('unit_id', $unitIds))
             ->when(!empty($unitIds), fn ($q) => $q->whereIn('unit_id', $unitIds))
-            ->selectRaw("DATE_FORMAT(created_at, '%Y-%m') AS ym, COUNT(*) AS total")
-            ->groupBy('ym')
-            ->pluck('total', 'ym');
+            ->pluck('created_at');
+
+        $counts = [];
+        foreach ($createdAt as $date) {
+            $ym = Carbon::parse($date)->format('Y-m');
+            $counts[$ym] = ($counts[$ym] ?? 0) + 1;
+        }
 
 
         $labels = [];
         $labels = [];
         $data   = [];
         $data   = [];
@@ -78,12 +84,13 @@ private function birthdays(array $unitIds): array
             ->whereNull('deleted_at')
             ->whereNull('deleted_at')
             ->whereMonth('birth_date', Carbon::now()->month)
             ->whereMonth('birth_date', Carbon::now()->month)
             ->when(!empty($unitIds), fn ($q) => $q->whereIn('unit_id', $unitIds))
             ->when(!empty($unitIds), fn ($q) => $q->whereIn('unit_id', $unitIds))
-            ->orderByRaw('DAYOFMONTH(birth_date)')
             ->get(['name', 'birth_date'])
             ->get(['name', 'birth_date'])
             ->map(fn ($s) => [
             ->map(fn ($s) => [
                 'day'  => (int) Carbon::parse($s->birth_date)->day,
                 'day'  => (int) Carbon::parse($s->birth_date)->day,
                 'name' => $s->name,
                 'name' => $s->name,
             ])
             ])
+            ->sortBy('day')
+            ->values()
             ->all();
             ->all();
     }
     }