$args */ public function __invoke(null $_, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): array { $result = []; $fields = $resolveInfo->getFieldSelection(); if (Arr::get($fields, 'anime')) { $result['anime'] = $this->search(Anime::class, $args); } if (Arr::get($fields, 'artists')) { $result['artists'] = $this->search(Artist::class, $args); } if (Arr::get($fields, 'animethemes')) { $result['animethemes'] = $this->search(AnimeTheme::class, $args); } if (Arr::get($fields, 'playlists')) { $result['playlists'] = $this->search(Playlist::class, $args); } if (Arr::get($fields, 'series')) { $result['series'] = $this->search(Series::class, $args); } if (Arr::get($fields, 'songs')) { $result['songs'] = $this->search(Song::class, $args); } if (Arr::get($fields, 'studios')) { $result['studios'] = $this->search(Studio::class, $args); } if (Arr::get($fields, 'videos')) { $result['videos'] = $this->search(Video::class, $args); } return $result; } /** * @param class-string $modelClass */ protected function search(string $modelClass, array $args): Collection { $term = Arr::get($args, 'search'); $page = Arr::get($args, 'page', 1); $first = Number::clamp(Arr::get($args, 'first', Config::integer('lighthouse.pagination.default_count')), 1, 15); $searchBuilder = Search::getSearch($modelClass, new Criteria($term)) ->search( fn (Builder $builder): Builder => $builder, $first, $page, ); return collect($searchBuilder->items()) ->when(is_numeric($term), fn (Collection $collection) => $collection->merge($modelClass::query()->whereKey($term)->get())); } }