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; } }