我想在一个包含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是否有一些构建复杂搜索查询的内置机制?
答案 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'));
}