目前,criteria
BelongsToMany alerts
反之亦然。它们通过数据透视表相关联:criteria_id
和alert_id
。
我正在使用属于经过身份验证的用户的关联Criteria
获取所有Alerts
,如下所示:
public function getMatches()
{
$matches = Criteria::whereUserId( Auth::id() )
->has('alerts')
->get();
}
这将返回所有相关结果,而现在,如果用户选择某个结果,我希望能够显示该结果。这就是我到目前为止所做的:
控制器
public function getMatchDetails($alert_id, $criteria_id)
{
$matches = Alert::find($alert_id)
->has('criterias')
->where('criteria_id', $criteria_id)
->get();
}
这会带来正确的变量,但是,我收到了一个MYSQL错误:
未找到列:1054'where子句'中的未知列'criteria_id'
select * from `alerts` where `alerts`.`deleted_at` is null and
(select count(*) from `criterias` inner join `alert_criteria` on `criterias`.`id` =
`alert_criteria`.`criteria_id` where `alert_criteria`.`alert_id` = `alerts`.`id`)
>= 1 and `criteria_id` = 7)
非常感谢任何帮助。
答案 0 :(得分:0)
我不知道我是否理解这个问题,但我会尝试回答
如果你想从视图中传递更多变量到控制器,你可以这样做: 图
@foreach($matches as $match)
@foreach($match->alerts as $alert)
<td>{{$alert->pivot->criteria_id}}</td>
<td><a href="/users/alert/matches/{{{$alert->id}}}/{{{$var_2}}}">{{$alert->id}}</a></td>
@endforeach
@endforeach
控制器
public function getMatchDetails($id, $var_2 = 0)
{
$myCriteriaIds = Criteria::whereUserId( Auth::id() )
->lists('id');
$match = Alert::find($id)->criterias()
->wherePivot('criteria_id', 'IN', $myCriteriaIds)
->get();
}
路线
Route::post('/users/alert/matches/{id}/{var_2}', array(
'as' => 'users-alert-matches',
'uses' => 'XXXController@getMatchDetails'
));
答案 1 :(得分:0)
你可以试试这样的事情
public function getMatchDetails($alert_id, $criteria_id)
{
$match = Alert::whereHas('criterias', function ($q) use ($criteria_id) {
$q->where('criteria_id', $criteria_id);
})->find($alert_id);
}
哪个会通过ID找到警报,并检查它是否与符合这些要求的标准有关系。