【发布时间】:2020-12-27 01:25:41
【问题描述】:
我有三个模型:国籍、国籍_机会、机会。
表格:
-------------------------------------------------------------------
nationalities | nationality_opportunities | opportunities
--------------------------------------------------------------------
id nationality_id id
name opportunity_id name
在机会模型中:
public function nationalities(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
{
return $this->belongsToMany(Nationality::class,'nationality_opportunities','opportunity_id','nationality_id');
}
在国籍模型中:
public function opportunities()
{
return $this->belongsToMany(Opportunity::class,'nationality_opportunities','opportunity_id','nationality_id');
}
-我想做什么?
我想根据他们选择的国籍检索机会记录,这些记录通过请求作为 id 数组发送,所以我想在数据透视表中检查这些 id 以获取它们的相关机会记录并将它们显示在一个 Vue js 组件。
机会模型中的范围过滤器:
public function scopeWithFilters($query)
{
return $query->when(count(request()->input('categories', [])), function ($query) {
$query->whereIn('opp_cat_id', request()->input('categories'));
})->when(count(request()->input('nationalities',[])),function ($query){
$query->whereIn('nationalities.nationality_id', request()->input('nationalities'));
});
}
参数:nationalities = [1,2,3,5]。
api 控制器中的属性函数:
public function opportunities()
{
$opportunities = Opportunity::withFilters()->get();
return PublicOpportunityResource::collection($opportunities);
}
【问题讨论】: