mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-04 09:04:03 +00:00
refactor: Improve domain resolution logic in DomainTenantResolver
This commit is contained in:
parent
e351316014
commit
c1fac4bb21
1 changed files with 28 additions and 5 deletions
|
|
@ -69,12 +69,21 @@ class DomainTenantResolver extends Contracts\CachedTenantResolver
|
||||||
protected static function setCurrentDomain(Tenant $tenant, string $domain): void
|
protected static function setCurrentDomain(Tenant $tenant, string $domain): void
|
||||||
{
|
{
|
||||||
/** @var Tenant&Model $tenant */
|
/** @var Tenant&Model $tenant */
|
||||||
if ($tenant instanceof SingleDomainTenant) {
|
|
||||||
$domainModelClass = config('tenancy.models.domain');
|
$domainModelClass = config('tenancy.models.domain');
|
||||||
/** @var Domain&Model $domainModel */
|
|
||||||
|
if ($tenant instanceof SingleDomainTenant) {
|
||||||
|
/**
|
||||||
|
* Single-domain tenants keep their hostname on the tenant row, so there's no Domain record
|
||||||
|
* we could look up. Build an in-memory instance that carries enough data for the Domain
|
||||||
|
* contract binding (hostname + tenant relation).
|
||||||
|
*
|
||||||
|
* @var Domain&Model $domainModel
|
||||||
|
*/
|
||||||
$domainModel = new $domainModelClass;
|
$domainModel = new $domainModelClass;
|
||||||
$domainModel->setAttribute('domain', $domain);
|
$domainModel->forceFill([
|
||||||
$domainModel->setAttribute(Tenancy::tenantKeyColumn(), $tenant->getTenantKey());
|
'domain' => $domain,
|
||||||
|
Tenancy::tenantKeyColumn() => $tenant->getTenantKey(),
|
||||||
|
]);
|
||||||
$domainModel->setRelation('tenant', $tenant);
|
$domainModel->setRelation('tenant', $tenant);
|
||||||
|
|
||||||
static::$currentDomain = $domainModel;
|
static::$currentDomain = $domainModel;
|
||||||
|
|
@ -82,7 +91,21 @@ class DomainTenantResolver extends Contracts\CachedTenantResolver
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static::$currentDomain = $tenant->domains->where('domain', $domain)->first();
|
if (! $tenant->relationLoaded('domains')) {
|
||||||
|
$tenant->loadMissing('domains');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var Domain&Model|null $resolvedDomain */
|
||||||
|
$resolvedDomain = $tenant->domains->firstWhere('domain', $domain);
|
||||||
|
|
||||||
|
if (! $resolvedDomain) {
|
||||||
|
$resolvedDomain = $domainModelClass::query()
|
||||||
|
->where('domain', $domain)
|
||||||
|
->where(Tenancy::tenantKeyColumn(), $tenant->getTenantKey())
|
||||||
|
->first();
|
||||||
|
}
|
||||||
|
|
||||||
|
static::$currentDomain = $resolvedDomain;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPossibleCacheKeys(Tenant&Model $tenant): array
|
public function getPossibleCacheKeys(Tenant&Model $tenant): array
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue