具有多个参数的搜索方法

时间:2017-04-28 11:45:54

标签: laravel

我在表单视图中创建了一个包含多个参数的搜索功能。

在我的表格中,我有:

  • 选择竞赛框

  • DATE_FIELD

  • 为团队1选择框,为团队2选择另一个框。

我想例如只搜索比赛或仅搜索日期或仅搜索团队1或2.我的实际查询如果我不发送所有参数,我得不到任何结果。

有人知道如何实现这一目标吗?

这是控制器:

public function getRencontres(Request $request){

    $compet = Compet::pluck('lb_compet' , 'id');

    $equipe = Equipe::pluck('lb_equipe' , 'id');

    $date_rencontre = $request->input('dt_rencontre');

    $search = $request->input('compet_id');

    if ($search) {
        $query = Rencontre::where(function($q) use($search , $equipe , $date_rencontre) {
            $q->where('compet_id', '=', $search)
                ->where('equipe_domicile_id' , '=' , $equipe)
                ->where('equipe_visiteur_id' , '=' , $equipe)
                ->where('dt_rencontre' , '=' , $date_rencontre);
        });
    }else {
        $query = Rencontre::select();
    }

    $rencontres = $query->orderBy('dt_rencontre', 'DESC')->paginate(10)
        ->appends(['recherche' => $search]);

    return view('rencontres/index' , compact('rencontres' , 'compet' , 'equipe'));
}

1 个答案:

答案 0 :(得分:1)

目前还不清楚您尝试做什么,但我认为您确实在查询构建器上寻找when方法:

$query = Rencontre::query();

$filters = [
    'equipe_domicile' => 'equipe_domicile_id',
    'equipe_visiteur' => 'equipe_visiteur_id',
    'dt_rencontre' => 'dt_rencontre',
    'compet_id' => 'compet_id',
];

foreach ($filters as $key => $column) {
    $query->when($request->{$key}, function ($query, $value) use ($column) {
        $query->where($column, $value);
    });
}

即使这不是你所追求的,也应该让你走上正轨。