hasMany(SitePage::class); } /** Links this site's pages make out to other domains. */ public function outboundLinks(): HasMany { return $this->hasMany(Backlink::class); } /** Backlinks pointing at this site, i.e. rows recorded against its domain as the target. */ public function inboundLinks(): HasMany { return $this->hasMany(Backlink::class, 'target_domain', 'domain'); } /** Other indexed sites whose root domain is this site's domain, e.g. blog.example.com under example.com. */ public function subdomains(): HasMany { return $this->hasMany(Site::class, 'root_domain', 'domain')->where('id', '!=', $this->id); } /** The root-domain Site this one is a subdomain of, if it's indexed and if this site even is a subdomain. */ public function rootSite(): ?Site { if ($this->domain === $this->root_domain) { return null; } return static::where('domain', $this->root_domain)->first(); } }