如何与EloquentFilter一起执行laravel WHERE

时间:2018-05-30 00:31:05

标签: laravel eloquent where-clause laravel-5.5

我正在使用此EloquentFilter来过滤前端的数据库,以及下面的控制器

public function indexArtisan(Request $request)
{
    $workers = Worker::filter($request->all())->get();
    $states = DB::table('states')->pluck("name", "id");
    return view ('artisans', compact('states'))->with(['workers' => $workers]);
}

但是,当我尝试使用WHERE查询为使用控制器调用的数据添加条件时,会满足WHERE条件并返回数据,但我的过滤器不再有效。 domain.com?name=xyz

public function indexArtisan(Request $request)
{

    $work = DB::table('workers')->where('career', '=', 'artisan')->get();
    $workers = Worker::filter($request->all())->get();
    $states = DB::table('states')->pluck("name", "id");

    return view ('artisans', compact('states','work'))->with(['workers' => $workers]);
}

也试过

$work = DB::table('workers')->where('career', '=', 'artisan')->get();
    $worker = $work->filter($request->all());
    $states = DB::table('states')->pluck("name", "id");

    return view ('artisans', compact('states'))->with(['worker' => $worker]);

我得到Error screen

如何在不破坏过滤器的情况下执行WHERE条件 我读过https://laravel.com/docs/5.6/queries#conditional-clauses我仍然无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:0)

如果使用$work->filter($request->all());,filter()方法是集合类的方法,因为$ work现在是一个集合。

因此,您需要使用模型类

的filter()方法
DB::table('workers')->where('career', 'artisan')->filter($request->all())->get();

应该有用。