'from', 'type' => 'date', 'label' => 'Od', 'nullable' => true], ['key' => 'to', 'type' => 'date', 'label' => 'Do', 'nullable' => true], ]; } public function columns(): array { return [ ['key' => 'segment_name', 'label' => 'Segment'], ['key' => 'activities_count', 'label' => 'Št. aktivnosti'], ]; } public function query(array $filters): Builder { $q = Activity::query() ->join('actions', 'activities.action_id', '=', 'actions.id') ->leftJoin('segments', 'actions.segment_id', '=', 'segments.id') ->when(! empty($filters['from']), fn ($qq) => $qq->whereDate('activities.created_at', '>=', $filters['from'])) ->when(! empty($filters['to']), fn ($qq) => $qq->whereDate('activities.created_at', '<=', $filters['to'])) ->groupBy('segments.name') ->selectRaw("COALESCE(segments.name, 'Brez segmenta') as segment_name, COUNT(*) as activities_count"); return $q; } }