目前,下面的函数可以正常工作,但->has('alerts')
会返回整个alerts
数组,包括所有关系数据。我想只返回该关系中的某些列。
public function getMatches()
{
$matches = Criteria::select('id')
->has('alerts')
->with(['alerts.location' => function($w){
$w->select('id');
}])
->with('alerts.user.companies')
->where('user_id', Auth::id())
->get();
return Response::json(array(
'matches' => $matches,
'status' => '200'
)
);
}
我想要返回的列可以在刀片格式中访问(请注意也使用的轴):
@foreach($matches as $match)
@foreach($match->alerts as $alert)
{{$alert->pivot->criteria_id}}
{{$alert->pivot->alert_id}}
{{$alert->price_value}}
{{$alert->location->type}}
{{$alert->category}}
{{$alert->description}}
{{$alert->category}}
{{$alert->user->companies->first()->logo->url('thumb')}}
{{$alert->pivot->viewed}}
@endforeach
@endforeach
我尝试了以下内容:
public function getMatches()
{
$matches = Criteria::select('id')
->has(['alerts' => function ($q){
$q->select('id', 'pivot.criteria_id');
}])
->with(['alerts.location' => function($w){
$w->select('id');
}])
->with('alerts.user.companies')
->where('user_id', Auth::id())
->get();
}
但是我遇到了以下错误:
strpos() expects parameter 1 to be string, array given
将以下函数添加到has()
函数时会发生错误:
->has(['alerts' => function ($q){
$q->select('id', 'pivot.criteria_id');
}])
有关如何从“提醒”表格中选择所述字段的任何帮助以及我非常感谢的相应关系。
答案 0 :(得分:1)
在你的代码中你有这样的东西:
->has(['alerts' => function ($q){
//...
}])
应该是这样的:
->whereHas('alerts', function ($q){
//...
})
答案 1 :(得分:0)
您不希望使用has
或whereHas
。 has
函数仅用于根据关系过滤结果。要仅选择某些列,请使用with()
$matches = Criteria::select('id')
->has('alerts')
->with(['alerts' => function($q){
$q->select('id', 'pivot.criteria_id');
}, 'alerts.location' => function($w){
$w->select('id');
}])
->with('alerts.user.companies')
->where('user_id', Auth::id())
->get();