在Laravel 5.2中查询包含多对多关系的三个模型

时间:2016-11-19 07:09:18

标签: laravel laravel-5 eloquent laravel-5.2

我有三个型号。服务,合作伙伴,位置。合作伙伴在某些地方提供服务。关系是服务所属的合作伙伴,合作伙伴所属的位置。现在我想做这样的事情:

$service=Service::find(1);

现在为特定位置找到此服务的合作伙伴。我可以使用join来做但是如何处理eloquent?

3 个答案:

答案 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();