在限制关系存在的同时,在Laravel中查询多对多关系

时间:2017-02-20 10:20:02

标签: php laravel eloquent

我在laravel中有以下模型:

TheJobs
- id
- description
- created_at
- deleted_at
- updated_at

TheSeries
- id
- title
- description
- created_at
- deleted_at
- updated_at


TheMovies
- id
- title
- description
- created_at
- deleted_at
- updated_at


mSeriesJobs
- seriesID
- jobID

mMoviesJobs
- movieID
- jobID

以下是TheJobs的关系:

 public function TheSeries() {
    return $this->belongsToMany('App\Models\TheSeries', 'mSeriesJobs', 'jobID', 'seriesID');
  }

  public function TheMovies() {
    return $this->belongsToMany('App\Models\TheMovies', 'mMoviesJobs', 'jobID', 'movieID');
  }

以下是TheSeries的关系:

  public function TheJobs() {
    return $this->belongsToMany('App\Models\TheJobs', 'mSeriesJobs', 'seriesID', 'jobID');
  }

相同的电影。

我想:

  • 获取所有TheSeries个工作。
  • 获取所有TheMovies个工作。
  • 使用TheSeriesTheMovies数据获取所有作业。

澄清问题:

我需要一个简单的Eloquent查询,它会选择至少有一个TheSeries的所有TheJobs

3 个答案:

答案 0 :(得分:1)

从我收集到的内容中,我相信您正在寻找"查询关系存在",即(Laravel Doc中的措辞)访问模型的记录,同时根据关系的存在限制结果

在这种情况下,如果您需要一个简单的Eloquent查询,该查询将选择至少有一个TheJobs的所有has,我相信您可以尝试$TheSeries = App\TheSeries::has('TheJobs')->get();

$TheJobs = App\TheJobs::has('TheSeries')->get();

另一种方式也适用于工作:

account.asu.dev

假设:所有模型关系都已正确定义。

你可以找到更多关于" has"在这里:https://laravel.com/docs/5.4/eloquent-relationships(在页面中搜索"查询关系存在"请。)

答案 1 :(得分:0)

在工作模型中:

public function series()
{
    return $this->hasMany('App\Series');
}

系列型号:

public function jobs()
{
    return $this->belongsToMany('App\Job');
}

获取所有TheSeries职位:

$series = Series::whereHas('jobs')->get();
$seriesJob = $series->jobs;

答案 2 :(得分:0)

有两种方法可以做到这一点。第一个是像你已经开始使用雄辩的关系。为了获得系列的所有工作,你所要做的就是:

$seriesCollection = TheSeries::all();
$seriesCollection->TheJobs();

在我看来,第二种方法更好。您将使用访问器来检索您想要的内容。 因此,在系列模型中,要获得与系列相关的所有作业,请执行以下操作:

public function getSeriesJobsAttribute(){
    $job_series = DB::table('mSeriesJobs')->where('seriesID', $this->attributes['id'])->get(['jobID']);
    $job = TheJobs::whereIn('id', $job_series)->get();
    return $job;
}

然后在您的视图中,只需在控制器中迭代$seriesCollection->series_jobs,您只需检索$seriesCollection;