subHour()->toDateString(); $written = 0; $base = AnalyticsEvent::query()->whereDate('occurred_at', $date); foreach ($base->clone()->select('site_id')->distinct()->pluck('site_id') as $siteId) { $query = $base->clone()->where('site_id', $siteId); $metrics = [ ['page_views', 'all', $query->clone()->where('event_type', 'page_view')->count()], ['visitors', 'all', $query->clone()->whereNotNull('visitor_hash')->distinct('visitor_hash')->count('visitor_hash')], ['sessions', 'all', $query->clone()->whereNotNull('session_hash')->distinct('session_hash')->count('session_hash')], ['conversions', 'all', $query->clone()->where('event_type', 'conversion')->count()], ['searches', 'all', $query->clone()->where('event_type', 'search')->count()], ]; foreach ($metrics as [$metric,$dimension,$value]) { DailyMetric::updateOrCreate(['site_id' => $siteId, 'metric_date' => $date, 'metric' => $metric, 'dimension' => $dimension], ['value' => $value]); $written++; } } return $written; } }