selectRaw("COUNT(*) AS count, DATE(created_at) AS date") ->groupByRaw("DATE(created_at)")->get(); $participationsUniquePerDay = Participation::query()->selectRaw( "DISTINCT customer_id AS user, COUNT(*) AS count, DATE(created_at) AS date" )->groupByRaw("DATE(created_at), user")->get(); $statsUnique = []; foreach ($participationsUniquePerDay as $participationPerDay) { $dateUnique = Carbon::parse($participationPerDay->date)->format('d/m/Y'); $statsUnique[$dateUnique] = isset($statsUnique[$dateUnique]) ? $statsUnique[$dateUnique] + 1 : 1; } $participationsUnique = Participation::query()->selectRaw("DISTINCT customer_id AS user, COUNT(*) AS count") ->groupBy("user")->orderBy("user")->get(); // * Données calculées à afficher. $totalParticipation = Participation::query()->count(); if (count($participationsUnique) > 0) { $avgParticipUser = round($totalParticipation / count($participationsUnique), 1); } else { $avgParticipUser = 0; } // * Tableau des dates comprises dans la table participation. foreach ($participations as $participation) { $datesParticipations[Carbon::parse($participation->date)->format('d/m/Y')] = $participation->count; } // * Création des tableaux avec toutes les dates depuis le début du jeu et le nombre de participations associées. $date = $settings->start_date; $dateFin = now()->lt($settings->end_date) ? now() : $settings->end_date; // Récupération des 3 codes EAN les plus utilisés. $codesEan = Participation::query()->select( DB::raw('COUNT(product_id) AS nb_usage, product_id') )->groupBy('product_id')->orderByDesc('nb_usage')->limit(3)->get(); // TODO : Carbon Interval. // * Génération des tableaux de date depuis le début du jeu. $dates = []; $count = []; $countUnique = []; while ($dateFin > $date) { $dates[] = $date->format('d/m/Y'); $count[] = isset($datesParticipations[$date->format('d/m/Y')]) ? $datesParticipations[$date->format('d/m/Y')] : 0; $countUnique[] = isset($statsUnique[$date->format('d/m/Y')]) ? $statsUnique[$date->format('d/m/Y')] : 0; $date->addDay(); } return view('back::pages.dashboard.index', compact( 'dates', 'count', 'countUnique', 'totalParticipation', 'avgParticipUser', 'codesEan', 'settings' )); } }