whereRaw("lower($column) = ?", Str::lower($name)) ->first(); if (! $studio instanceof Studio) { Log::info("Creating studio '$name'"); $studio = Studio::query()->create([ Studio::ATTRIBUTE_NAME => $name, Studio::ATTRIBUTE_SLUG => Str::slug($name, '_'), ]); } return $studio; } /** * Ensure Studio has Resource. * * @param Studio $studio * @param ResourceSite $site * @param int $id * @return void */ public function ensureStudioHasResource(Studio $studio, ResourceSite $site, int $id): void { $studioResource = ExternalResource::query() ->where(ExternalResource::ATTRIBUTE_SITE, $site->value) ->where(ExternalResource::ATTRIBUTE_EXTERNAL_ID, $id) ->where(ExternalResource::ATTRIBUTE_LINK, $site->formatResourceLink(Studio::class, $id)) ->first(); if (! $studioResource instanceof ExternalResource) { Log::info("Creating studio resource with site '{$site->localize()}' and id '$id'"); $studioResource = ExternalResource::query()->create([ ExternalResource::ATTRIBUTE_EXTERNAL_ID => $id, ExternalResource::ATTRIBUTE_LINK => $site->formatResourceLink(Studio::class, $id), ExternalResource::ATTRIBUTE_SITE => $site->value, ]); } if (StudioResource::query() ->where($studio->getKeyName(), $studio->getKey()) ->where($studioResource->getKeyName(), $studioResource->getKey()) ->doesntExist() ) { Log::info("Attaching resource '$studioResource->link' to studio '{$studio->getName()}'"); $studioResource->studios()->attach($studio); } } }