Laravel 过滤器在尝试添加时不起作用

病房丸

所以我正在为一个项目在 laravel 中做一个过滤器,我和我的老师正在为以下事情犹豫不决。

在下面的代码中,对播放器的一般搜索有效,但如果在 POST 请求中定义了其他语句,则不会添加其他语句;

控制器:

namespace App\Http\Controllers;

use App\Http\Requests;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;

class FilterController extends Controller
{
    public function filter(Request $request)
    {
      $player = new \App\Player;
      $filters = $player->newQuery();
      $query = Input::get('q');

      // Search for a player based on their status.
      if ($request->has('status')) {
        $filters->orwhere('status', $request->input('status'));
      }
      // Search for a player player on their club.
      if ($request->has('club')) {
        $filters->orwhere('Club', $request->input('club'));
      }
      // Search for a player player on their team category .
      if ($request->has('Category')) {
        $filters->orwhere('Category', $request->input('Category'));
      }
      // Search for a player player if he is flagged as removed.
      if ($request->has('remove')) {
       $filters->orwhere('remove', $request->input('remove'));
      }
      // Search for a player player on their size.
      if ($request->has('size')) {
        $filters->orwhere('Size', $request->input('size'));
      }

      // General search for a player
      if($request->has('q')){
        $filters->orwhere('first_name','LIKE','%'.$query.'%')
        ->orWhere('last_name','LIKE','%'.$query.'%')
        ->orWhere('mobile','LIKE','%'.$query.'%')
        ->orWhere('street_name_nummer','LIKE','%'.$query.'%')
        ->orWhere('city','LIKE','%'.$query.'%');
      }
      // Get the results and return them.

      $results = $filters->get();

      if(count($results) > 0){
        return view('lists/ekick')->withDetails($results,$query);
      } else return view ('lists/ekick')->with('No Details found. Try to search again !');
    }
}

路线:

Route::any('lists/ekick', 'FilterController@filter');

输出视图:

img 从视图

纳摩舍克

要接受 Aaron Sarays 的回答,您很可能以错误的方式过滤。通常附加过滤器是每条记录必须满足的附加条件才能成为结果的一部分。如果您考虑 Excel 表格并筛选一列,则您甚至无法在第二列中筛选所有选项,因为您已经限制了结果,并且只能进一步限制它。

将这些知识与改进的过滤方式相结合,您会收到如下查询:

public function filter(Request $request)
{
    $query = $request->input('q');

    $results = \App\Player::query()
        ->when($request->input('status'), function ($query, $status) {
            $query->where('status', $status);
        })
        ->when($request->input('club'), function ($query, $club) {
            $query->where('club', $club);
        })
        ->when($request->input('category'), function ($query, $category) {
            $query->where('category', $category);
        })
        ->when($request->input('remove'), function ($query, $remove) {
            $query->where('remove', $remove);
        })
        ->when($request->input('size'), function ($query, $size) {
            $query->where('size', $size);
        })
        ->when($query, function ($query, $q) {
            $query->where(function ($query) use ($q) {
                $query->where('first_name', 'LIKE', "%$q%")
                    ->orWhere('last_name', 'LIKE', "%$q%")
                    ->orWhere('mobile', 'LIKE', "%$q%")
                    ->orWhere('street_name_number', 'LIKE', "%$q%")
                    ->orWhere('city', 'LIKE', "%$q%");
            });
        })
        ->get();

    if ($results->isNotEmpty()) {
        return view('lists/ekick')->withDetails($results, $query);
    } else {
        return view ('lists/ekick')->with('No Details found. Try to search again !');
    }
}

when($condition, $callback)上面查询中使用的函数用于动态构建查询。您可以认为以下两个语句等效:

// option 1: conditional query (preferred!)
$results = Player::query()
    ->when($request->input('q'), function ($query, $q) {
        $query->where('name', 'LIKE', "%$q%");
    })
    ->get();

// option 2: plain php query building... (not very clean code)
$query = Player::query();

if ($request->input('q')) {
    $query->where('name', 'LIKE', '%'.$request->input('q').'%');
}

$results = $query->get();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

angularjs过滤器(不起作用)

来自分类Dev

SlickGrid过滤器不起作用

来自分类Dev

过滤器在Laravel 4上不起作用

来自分类Dev

为什么在laravel中按下浏览器的后退按钮时过滤器不起作用?

来自分类Dev

Laravel过滤器不起作用

来自分类Dev

jqGrid过滤器不起作用

来自分类Dev

过滤器在Laravel 5

来自分类Dev

Laravel 5 Auth过滤器不起作用

来自分类Dev

日期过滤器不起作用

来自分类Dev

Laravel控制器过滤器:在对特定方法进行过滤之前,该过滤器不起作用

来自分类Dev

OpenCover过滤器不起作用

来自分类Dev

mongodb过滤器不起作用

来自分类Dev

python过滤器不起作用

来自分类Dev

嵌套过滤器不起作用

来自分类Dev

单击时添加活动类,但Isotope.js过滤器不起作用

来自分类Dev

嵌套过滤器不起作用

来自分类Dev

使用Maven过滤器时CDI不起作用

来自分类Dev

为什么在laravel中按下浏览器的后退按钮时过滤器不起作用?

来自分类Dev

搜索过滤器不起作用

来自分类Dev

$过滤器不起作用

来自分类Dev

AngularJS过滤器不起作用

来自分类Dev

jwd过滤器不起作用laravel 5

来自分类Dev

Django过滤器不起作用

来自分类Dev

AngularJS过滤器不起作用

来自分类Dev

过滤器Laravel集合不起作用

来自分类Dev

猪过滤器不起作用

来自分类Dev

Laravel 的集合过滤器通过引用不起作用

来自分类Dev

NHibernate 过滤器不起作用

来自分类Dev

向 Laravel 模型添加过滤器辅助方法