Eloquent / Laravel - 将WHERE子句放在具有链式关系的参考表上

时间:2015-12-24 16:22:55

标签: laravel laravel-4 eloquent

我的Job模型中有以下关系函数:

public function resourceTypes(){

    return $this->belongsToMany('ResourceType', 'job_requests');

}

public function resources(){

    return $this->belongsToMany('Resource', 'jobs_resources')->withPivot('flow_type', 'resource_type_id');

}

我可以使用以下方法获取包含上述两种关系数据的对象:

$job = Job::findorfail($projectId);
$result = $job->with('resources.resourceTypes')->get();

我想在jobs_resources数据透视表上放置一个where子句 - 特别是在列flow_type上。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

$job = Job::with('resources' => function($q) {
   $q->with('resourceTypes')->where('flow_type',2);
})->findorfail($projectId);

在上面,您只会获得flow_type = 2

的资源

答案 1 :(得分:0)

$result = DB::table('job')
        ->join('job_resources', 'job.id', '=', 'job_resources.job_id')
        ->join('job_requests', 'job_resources.request_id', '=', 'job_requests.id')
        ->where('job_resources.flow_type', '=', CONDITION)
        ->get();

您的表数据未在输入中清除,但此方法(查询构建器)应该可以正常工作

答案 2 :(得分:0)

我最终使用了以下声明:

Job::with(['resources' => function ($query){
   $query->wherePivot('flow_type', '=', '1' );
}, 'resources.resourceTypes'])->where('id', $projectId)->firstOrFail();