hasMany(Episode::class, 'hentai_id'); } public function torrents() { return $this->hasMany(Torrents::class, 'hentai_id'); } public function title(): String { return $this->episodes->first()->title; } /** * Has a Gallery. */ public function gallery() { return $this->hasMany(Gallery::class); } /** * Check if hentai contains loli / shota tag */ public function isLoliOrShota(): bool { $problematicTags = ['Loli', 'Shota']; return Cache::remember( "episode:{$this->id}:has_problematic_tags", now()->addMinutes(1440), fn () => $this->episodes[0]->tags->pluck('name')->intersect($problematicTags)->isNotEmpty() ); } public function toSitemapTag(): Url | string | array { return Url::create(route('hentai.index', $this->slug)) ->setLastModificationDate(Carbon::create($this->created_at)); } }