*/ public function __invoke(?PortfolioVertical $vertical = null): Collection { return $this->baseQuery($vertical)->get(); } /** * @return LengthAwarePaginator */ public function paginate(?PortfolioVertical $vertical = null, int $perPage = 9): LengthAwarePaginator { return $this->baseQuery($vertical)->paginate($perPage)->withQueryString(); } /** * @return Builder */ private function baseQuery(?PortfolioVertical $vertical): Builder { $query = PortfolioCase::query() ->published() ->with(['images']) ->orderBy('sort_order'); if ($vertical !== null) { $query->where(function (Builder $builder) use ($vertical): void { foreach ($vertical->eventTypePatterns() as $pattern) { $builder->orWhere('event_type', 'ilike', $pattern); } }); } return $query; } }