countByDay(Article::query(), 'created_at', $range, $days)), new Series('Published', $this->countByDay(ArticlePublication::query(), 'published_at', $range, $days)), ]); } /** * @param Builder $query * @param array $days * @return array */ private function countByDay(Builder $query, string $column, DateRange $range, array $days): array { /** @var array $counts */ $counts = $query ->whereBetween($column, [$range->from, $range->to]) ->selectRaw("DATE({$column}) as bucket, COUNT(*) as aggregate") ->groupBy('bucket') ->pluck('aggregate', 'bucket') ->all(); return array_map( fn (string $day): int => (int) ($counts[$day] ?? 0), $days, ); } }