Laravel - 只在数据透视表中查询一行并返回关系中的所有数据

时间:2014-11-12 19:16:08

标签: php laravel laravel-4 eloquent pivot-table

目前,criteria BelongsToMany alerts反之亦然。它们通过数据透视表相关联:criteria_idalert_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)

Screenshot

非常感谢任何帮助。

2 个答案:

答案 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找到警报,并检查它是否与符合这些要求的标准有关系。