【问题标题】:Eloquent / Laravel - Putting a WHERE Clause on a Reference Table With Chained RelationshipsEloquent / Laravel - 将 WHERE 子句放在具有链式关系的引用表上
【发布时间】:2015-12-24 16:22:55
【问题描述】:

我的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 列上。

我该怎么做?

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    试试这样的:

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

    在上面你只会得到flow_type = 2的那些资源

    【讨论】:

      【解决方案2】:

      我最终使用了以下语句:

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

      【讨论】:

        【解决方案3】:
        $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();
        

        您的输入中的表数据不清楚,但此方法(查询生成器)应该可以工作

        【讨论】:

          猜你喜欢
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-09
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多