withScheme('https')->__toString(); $id = ResourceSite::parseIdFromLink($url); $id = $id === null ? null : intval($id); if ($model instanceof BaseModel) { $urlPattern = $site->getUrlCaptureGroups($model); if (preg_match($urlPattern, $url, $matches)) { $url = $site->formatResourceLink($model::class, intval($matches[2]), $matches[2], $matches[1]); } if ($id !== null && $site->usesIdInLink()) { $url = $site->formatResourceLink($model::class, $id, strval($id)); } } $resource = ExternalResource::query() ->where(ExternalResource::ATTRIBUTE_SITE, $site->value) ->where(fn (Builder $query) => $query->where(ExternalResource::ATTRIBUTE_LINK, $url) ->orWhere(ExternalResource::ATTRIBUTE_LINK, $url.'/')) ->first(); if ($resource === null) { Log::info("Creating External Resource {$site->localize()} -> '{$url}'"); $resource = ExternalResource::query()->create([ ExternalResource::ATTRIBUTE_LINK => $url, ExternalResource::ATTRIBUTE_SITE => $site->value, ExternalResource::ATTRIBUTE_EXTERNAL_ID => $id, ]); } $model?->resources()?->attach($resource); return $resource; } }