У меня есть 3 модели с отношениями. Там отношения такие:
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');
}]);
Это прекрасно работает, если я затем ввожу коллекцию, он возвращает только сайты с активными арендаторами, а затем возвращает арендаторов вместе с ним.
Моя проблема в том, что у каждого арендатора может быть много арендаторов на многих сайтах.
Допустим, у меня есть арендатор по имени 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 захватывается обоими сайтами, потому что он имеет право аренды обоих сайтов. Но тогда вместо того, чтобы только захватить аренду для этого сайта, он захватывает все свои аренды.
Как получить ТОЛЬКО права аренды для этого сайта? Извините, если это сбивает с толку, это довольно сложно объяснить.