在简单的代码中实现搜索和过滤的最佳方法是什么?

时间:2017-10-09 02:04:38

标签: php laravel search eloquent

目前我正在使用nicolaslopezj/searchable进行我的laravel搜索。

搜索很好,但我想添加一个过滤器和我的过滤器,如性别,类或位置。

例如在这种情况下:

1 --- Jane Doe --- F --- A级---美国

2 --- John Doe --- M --- B级--- PH

我目前的代码是这样的:

if (isset ($keyword) )
$voters = Voter::search($request->keyword)->paginate(10);

if (isset ($keyword) && isset($request->sex))
$voters = Voter::search($request->keyword)->where('sex', $request->sex)->paginate(10);

if ( !isset($keyword) && isset($request->sex))
$voters = Voter::where('sex', $request->sex)->paginate(10);

if( isset($keyword && !isset($request->sex)
$voters = Voter::search($request->keyword)->paginate(10);

那么任何想法如何最大限度地减少很多条件?是否有单行代码/查询?

2 个答案:

答案 0 :(得分:1)

您可以使用Model::query()Request::has()方法检查请求..例如..

$voters = Voter::query();

if ($request->has('keyword'))
    $voters = $voters->search($request->keyword);

if ($request->has('sex'))
    $voters = $voters->where('sex', $request->sex);

$voters = $voters->paginate(10);

答案 1 :(得分:0)

我优化了你的代码:

$voters = Voter::on();

if (isset ($request->keyword))
    $voters = $voters->search($request->keyword);

if (isset($request->sex))
    $voters = $voters->where('sex', $request->sex);

$voters = $voters->paginate(10);