displayNameFieldName = "titles.0.title"; } public static function scrape(int $id) { $data = app('JikanParser')->getProducer(new ProducerRequest($id)); $data = json_decode( app('SerializerV4') ->serialize($data, 'json'), true ); unset($data['results'], $data['has_next_page'], $data['last_visible_page']); return $data; } public function toSearchableArray(): array { $titles = !is_null($this->titles) ? collect($this->titles)->map(fn ($x) => $x["title"])->toArray() : ['']; return [ 'id' => (string) $this->mal_id, 'mal_id' => (int) $this->mal_id, 'url' => !is_null($this->url) ? $this->url : '', 'titles' => implode(', ', $titles), 'established' => $this->convertToTimestamp($this->established), 'favorites' => $this->favorites, 'count' => $this->count ]; } public function getCollectionSchema(): array { return [ 'name' => $this->searchableAs(), 'fields' => [ [ 'name' => '.*', 'type' => 'auto', ], [ 'name' => 'titles', 'type' => 'string', 'optional' => false, 'infix' => true, 'sort' => true ], [ 'name' => 'url', 'type' => 'string', 'optional' => false, 'infix' => true, 'sort' => true ], ] ]; } public function typesenseQueryBy(): array { return [ 'url', 'titles' ]; } public function getTitleAttributeName(): string { return 'titles'; } }