目前,对于用户,我可以正确返回所有matches
。
public function getMatches()
{
$matches = Criteria::whereUserId( Auth::id() )
->has('alerts')
->with('alerts.location', 'alerts.user.companies')
->get();
$this->layout->content = View::make('users.alert.matches',
array('matches' => $matches));
}
关系:
Criteria
所属的商家Alerts
和Alert
belongsToMany Criterias
。
问题:
如果用户希望查看有关某个匹配项的更多信息,我希望get
只是来自数据库的结果。在我看来,我可以访问第一个criteria_id
内的forloop
和第二个forloop
内的alert_id。
@foreach($matches as $match)
{{$match->id}}
@foreach($match->alerts as $alert)
{{$alert->id}}
@endforeach
@endforeach
但是,如何使用这些变量只选择一个用户想要查看更多信息的数据透视表匹配?
如果用户要选择某个{{$ alert-> id}},如何查找哪个criteria_id与该alert_id相关,然后查询数据库以返回该行的信息,两者均来自criteria
表和alert
表,以及上面显示的with->
语句。
非常感谢你的帮助。
答案 0 :(得分:0)
我认为您可以将数据透视表中的数据包含在您的预先加载中,如下所示:
public function getMatches()
{
$matches = Criteria::whereUserId( Auth::id() )
->has('alerts')
->with('alerts.location', 'alerts.user.companies')
->withPivot('foo', 'bar'); //pivot table columns you need from pivot table criteria_alert
->get();
$this->layout->content = View::make('users.alert.matches',
array('matches' => $matches));
}
然后像这样访问:
@foreach($matches as $match)
{{$match->id}}
@foreach($match->alerts as $alert)
{{$match->pivot->foo}} // pivot table data
{{$alert->id}}
@endforeach
@endforeach
查看laravel documentation了解详情。
此外,这可能有助于您简化代码:
$matches = Auth::user()->with('criterias', 'criterias.alert')->get();
根据您的标准来提醒这样的关系:
return $this->belongsToMany('Alert')->withPivot('foo', 'bar');
希望这有帮助。