使用数据透视表的Eloquent或Query构建器搜索

时间:2014-12-27 01:15:47

标签: php laravel laravel-4 eloquent

我面对的是一个简单的要求 - 搜索位置等于$ locationId且具有特定服务($ serviceId)的所有个人资料,但我不知道如何添加通过数据透视表查询的where条件?

我的模型如下:

class Profile extends Model {

    public function services() {
        return $this->belongsToMany('Service', 'profile_services', 'profile_id', 'service_id');
    }

}

class Service extends Model {}

我想做的事情就是这样:

$results = Profile::where('location_id', '=', $locationId)->where('services.id', '=', $serviceId)->get();

注意我知道->where('services.id', '=', $serviceId)不正确(我已经把它放在这里以便更好地解释我想要实现的目标)但是我&# 39;我想知道我是使用Eloquent还是数据库查询构建器来做到这一点。

1 个答案:

答案 0 :(得分:6)

您可以使用whereHas

过滤关系
$results = Profile::where('location_id', '=', $locationId)
                  ->whereHas('services', function($query) use ($serviceId){
                      $query->where('services.id', '=', $serviceId);
                  })->get();