在Laravel 5中的多条件搜索查询


Multiple criteria search query in Laravel 5

我想在一个有20列的表上进行一个复杂的搜索。用户有一个表单,他可以从0到18个条件中选择进行搜索。我在一个控制器方法中捕获这些条件,并将结果返回给视图。问题是我不知道如何构造查询。我尝试了2个标准,用下面的函数,但它没有返回一个集合,我很奇怪dd($items的输出是什么。无论如何,如果我删除dd($items),函数不返回任何东西,就像它在表中找不到任何东西(这是不可能的,因为我以这样的方式插入了条件,函数应该返回一些东西)。

public function looksomething($param1=null,$param2=null){
$query= "all()->";
if($param1!=null)
    $query.="where(’Field1’,’$param1’)"."<br>->";
if($param2!=null)
    $query.="where(’Field2’,’$param2’)"."<br>->";
$query.="get()";
$items=tablename::query();
return view('someview’,['items'=>$items]);
}

因此,在上面的函数中,您可以看到我认为应该如何构建搜索查询。它类似于我为经典php创建的模型。首先,我不知道我做错了什么。第二,Laravel是否有一些内置机制来构建复杂的搜索查询?

对于简单的搜索,您可以在模型中定义一个作用域方法,该方法将参数数组作为第二个参数,然后添加您需要的任何子句。像这样:

class SomeModel extends Model
{
    public function scopeFilter($query, array $request)
    {
        if ($request->has('column')) {
            $query = $query->where('column', '=', $request->get('column'));
        }
        // And so on...
        return $query;
    }
}

然后你可以把请求参数从你的控制器动作传递给你的模型:

public function index(Request $request)
{
    $results = SomeModel::filter($request->all())->paginate();
    return view('some.view', compact('results'));
}