resolveVideoId($request); return [ 'sometimes', 'required', 'integer', Rule::exists(AnimeThemeEntry::class, AnimeThemeEntry::ATTRIBUTE_ID), Rule::when( ! empty($videoId), [ Rule::exists(AnimeThemeEntryVideo::class, AnimeThemeEntryVideo::ATTRIBUTE_ENTRY) ->where(AnimeThemeEntryVideo::ATTRIBUTE_VIDEO, $this->resolveVideoId($request)), ] ), ]; } /** * Determine if the field should be included in the select clause of our query. * * @param Query $query * @param Schema $schema * @return bool */ public function shouldSelect(Query $query, Schema $schema): bool { // Needed to match entry relation. return true; } /** * Set the update validation rules for the field. * * @param Request $request * @return array */ public function getUpdateRules(Request $request): array { $videoId = $this->resolveVideoId($request); return [ 'sometimes', 'required', 'integer', Rule::exists(AnimeThemeEntry::class, AnimeThemeEntry::ATTRIBUTE_ID), Rule::when( ! empty($videoId), [ Rule::exists(AnimeThemeEntryVideo::class, AnimeThemeEntryVideo::ATTRIBUTE_ENTRY) ->where(AnimeThemeEntryVideo::ATTRIBUTE_VIDEO, $this->resolveVideoId($request)), ] ), ]; } /** * Get dependent video_id field. * * @param Request $request * @return mixed */ private function resolveVideoId(Request $request): mixed { if ($request->has(FeaturedTheme::ATTRIBUTE_VIDEO)) { return $request->get(FeaturedTheme::ATTRIBUTE_VIDEO); } /** @var FeaturedTheme|null $featuredTheme */ $featuredTheme = $request->route('featuredtheme'); return $featuredTheme?->video_id; } }