【问题标题】:Multiple criteria search query in Laravel 5Laravel 5 中的多条件搜索查询
【发布时间】:2017-06-23 02:29:00
【问题描述】:

我想对一个有 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 是否有一些内置机制来构建复杂的搜索查询?

【问题讨论】:

  • 你使用 Elqoent 吗?喜欢模特?还有类似 YOURMODEL::all() 的方法?
  • 是的,这正是我使用的。

标签: php laravel-5


【解决方案1】:

对于简单的搜索,您可以在模型中定义一个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'));
}

【讨论】:

  • 所以我猜数组 $request 将自动填充表单中的数据?如何将表单中的数据传递给 SomeModel ?
  • @Texas 如果您查看第二个代码示例,您会看到请求数据通过过滤器范围传递给模型。
  • @MartinBean scopeFilter 在控制器中的使用情况如何?
  • @joshuamabina SomeModel::filter().
  • @joshuamabina laravel.com/docs/master/eloquent#local-scopes “一旦定义了范围,就可以在查询模型时调用范围方法。但是,调用方法时不需要包含作用域前缀。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2019-06-03
  • 2018-05-16
  • 2020-09-12
  • 2014-10-25
相关资源
最近更新 更多