Laravel 5中的多标准搜索查询

时间:2015-07-10 17:38:21

标签: php laravel-5

我想在一个包含20列的表上进行复杂搜索。 用户有一个表格,他可以从中选择0到18个标准进行搜索。我在控制器方法中捕获这些条件并将结果返回到视图。问题是我不知道如何构造查询。我尝试了2个标准,使用下面的函数,但是它没有返回一个集合,我对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]); } ,该函数不会返回任何内容,就像它在表中找不到任何内容一样(这是不可能的,因为我以一种函数应该返回的方式插入标准)。

{{1}}

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

1 个答案:

答案 0 :(得分:3)

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

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'));
}