使用多个'orwhere'子句搜索模型

时间:2017-11-29 23:08:44

标签: php laravel laravel-5.4

我有一个函数,它接受一个字符串,并针对多个字段(也就是表中的几乎所有数据库字段)进行匹配(非常广泛)。这似乎有点笨拙,但它有效;但是,目前这不是我最关心的问题。

是否可以:显示哪个'orwhere'将记录返回到集合中?我想(在结果视图中)显示字符串匹配的记录的哪一部分。

    $apps = Application::all();
    $apps->where('bill_company_name', 'like', '%'.$request->filter.'%');
    $apps->orwhere('bill_address', 'like', '%'.$request->filter.'%');
    $apps->orwhere('bill_city', 'like', '%'.$request->filter.'%');
    ...
    $apps = $apps->paginate();
    $apps->withPath('custom/url');    
    return $apps;

我知道我可能会在视图上执行此操作(通过更多代码再次对记录进行过滤),但此选项听起来更加费力。

谢谢!

4 个答案:

答案 0 :(得分:0)

你可以这样做:

$records = Model::query();
$records = $records->where(‘field’, ‘value’);
…
$records_where = $records->orWhere(‘field’, ‘value’)->get();
if($records_where->isNotEmpty()){
      // save into array this one that matched
}
$records = Model::query();

然后在视图上迭代匹配的那些,但是如果你有太多的字段,这个过程可能会有点安静......

答案 1 :(得分:0)

在你的模特中,

public function getMatch($str) {
   if (strpos($this->bill_address, $str) !== false) {
       return "bill_address";
   } elseif (...) { ... }
}

答案 2 :(得分:0)

不是真正回答这个问题,所以可能会稍微偏离主题,但可能会在将来帮助你:因为你已经注意到你正在做的事情变得有点混乱这种方式,我建议用不同的技术解决问题。例如,lucene搜索引擎(由Solr和弹性搜索使用)提供了一个调试功能,可用于详细显示返回记录的分数是如何组成的,因此您可以查看查询的哪个部分。

它快得多:) https://lucene.apache.org/solr/guide/6_6/common-query-parameters.html#CommonQueryParameters-ThedebugParameter

答案 3 :(得分:-1)

你可以试试吗? 或者 - > orWhere

https://laravel.com/docs/5.5/queries#where-clauses