我有三个型号。服务,合作伙伴,位置。合作伙伴在某些地方提供服务。关系是服务所属的合作伙伴,合作伙伴所属的位置。现在我想做这样的事情:
$service=Service::find(1);
现在为特定位置找到此服务的合作伙伴。我可以使用join来做但是如何处理eloquent?
答案 0 :(得分: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);
});
您还可以查询名称,日期等其他内容。
答案 1 :(得分: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);
答案 2 :(得分:0)
我最终这样做了
$service->partners()->whereHas('locations', function ($query) use ($location)
{
$query->where('id', $location);
})
->get();