我有3个带有Relations的模型。有这样的关系
Sites
Tenancies
Tenants
1 site can have many tenancies
1 tenancy can have 1 tenant
通过使用像这样的hasManyThrough
关系,我得到了对该站点有租约的所有租户的集合
public function tenants(){
return $this->hasManyThrough(
'App\Models\Tenants\Tenants',
'App\Models\Tenancies\Tenancies',
'site_id', // Foreign key on Tenancies table...
'id', // Foreign key on invoices table...
'id', // Local key on tenants table...
'linked_tenant_id' // Local key on tenancies table...
)->distinct();
}
然后仅获得这样的活跃租约
public function activeTenancies(){
return $this->hasMany('App\Models\Tenancies\Tenancies', 'linked_tenant_id', 'id')->where('active',1);
}
然后这样称呼
$sites = Sites::whereHas('tenants')->with(['tenants' => function($query){
$query->whereHas('activeTenancies')->with('activeTenancies');
}]);
这很好用,如果我随后在集合中添加dd,则它仅返回具有有效租约的站点,然后随其返回租户。
我的问题是,每个租户可以在许多站点拥有许多租约。
因此,假设我有一个名为FakeComp的租户,并且可以说FakeComp与此站点1和站点2都有租约。
Site - 1
Tenancy - TenancyABC
Tenant - FakeComp
Site - 2
Tenancy - TenancyBCA
Tenant - FakeComp
当我循环我的站点和租户时,由于“ FakeComp”同时具有站点1和站点2的租约,因此会返回
Site - 1
|
|-----> Fake Comp
|
|---------> TenancyABC
|---------> TenancyBCA
Site - 2
|
|-----> Fake Comp
|
|---------> TenancyABC
|---------> TenancyBCA
不仅仅是像这样获得该网站的租约
Site - 1
|
|-----> Fake Comp
|
|---------> TenancyABC
Site - 2
|
|-----> Fake Comp
|
|---------> TenancyBCA
FakeComp被两个站点都捕获,因为它与两个站点都有租约。但是,它不仅抢了该站点的租约,还抢了它的所有租约。
我如何仅获得该站点的租约?很抱歉,这很令人困惑,很难解释。
答案 0 :(得分:0)
似乎您在site_id
表上有一个tenancies
,我猜想它是指sites
表上的ID,因此您可以在上面添加一个关系Site
到Tenancy
的模型(如果站点可以有多个租约,则为简单的hasOne或hasMany)。
为澄清起见,您正在站点和租户之间使用hasManyThrough
关系,因此关系名称是说您有许多至租户的租户。因此,站点与租户之间有直接的联系。