2016-11-19 95 views
1

我有三種模型。服務,合作伙伴,位置。合作伙伴在某些地點提供服務。關係是服務belongsToMany合作伙伴,合作伙伴belongsToMany位置。現在我想要做這樣的事情:查詢來自Laravel 5.2中包含多對多關係的三個模型

$service=Service::find(1); 

現在找到一個特定位置的此服務的合作伙伴。我可以通過加入來做到這一點,但如何處理口才?

回答

0

最後我做類似這

$service->partners()->whereHas('locations', function ($query) use ($location) 
{ 
    $query->where('id', $location); 
}) 
->get(); 
0

首先,這只是兩個多對多的關係。

所以,我對得到一個不同的服務的位置的方法是:

Locations::whereHas('partners.services', function ($query) { 
     $query->where("id", $serviceId); 
    })->get(); 

whereHas功能只過濾有其鏈接到至少一個服務合作伙伴位置。此外,關閉設置了另一個標準,即$serviceId

要獲取特定服務的合作伙伴上的特定位置:

Partner::whereHas('services', function ($query) { 
     $query->where('id', $serviceId); 
    })->whereHas('locations', function ($query) { 
     $query->where('id', $locationId); 
    }); 

您還可以查詢其他像姓名,日期等。

0

在服務模式(service.php)

public function partner() { 
    return $this->hasMany('Partner')->with('location'); 
} 

在合作伙伴模式(partner.php)

public function partner() { 
    return $this->hasMany('location'); 
} 
在你的控制器

$service=Service::with('partner')->find(1);