我在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
个工作。TheSeries
或TheMovies
数据获取所有作业。我需要一个简单的Eloquent查询,它会选择至少有一个TheSeries
的所有TheJobs
。
答案 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
;