PostSearchResource::class, Page::class => PageSearchResource::class, EducationalGroup::class => EducationGroupSearchResource::class, EducationalProgram::class => EducationalProgramSearchResource::class, Event::class => EventSearchResource::class, AdditionalEducation::class => AdditionalEducationSearchResource::class, //?? User::class => UserSearchResource::class, //?? Faculty::class => FacultySearchResource::class, //?? ]; public function run(string $query): Collection { $results = Search::new() ->add(Post::where('status', '=', 'published'), ['title', 'search_data'], 'publish_at') ->add(Page::with('section')->where('searchable', '=', true), ['title', 'search_data']) ->add(Event::where('event_date_start', '>', Date::now()), 'title', 'created_at') ->add(AdditionalEducation::where('is_active', '=', true), 'title') ->add(EducationalGroup::with('schedules'), 'title') ->add(EducationalProgram::where('status', '=', true)->whereHas('admission_plans'), 'name') ->add(Faculty::where('is_active', '=', true), 'title') ->add(User::whereHas('userDetail'), 'name') ->orderByDesc() ->beginWithWildcard() ->includeModelType() ->ignoreCase(true) ->search("$query"); $resourceMap = $this->resourceMap; $resources = collect($results)->map(function ($result) use ($resourceMap) { $resourceClass = $resourceMap[get_class($result)] ?? null; return $resourceClass ? new $resourceClass($result) : null; })->filter(); // Filter out nulls from resources return $resources; } }