我有一个函数,它接受一个字符串,并针对多个字段(也就是表中的几乎所有数据库字段)进行匹配(非常广泛)。这似乎有点笨拙,但它有效;但是,目前这不是我最关心的问题。
是否可以:显示哪个'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;
我知道我可能会在视图上执行此操作(通过更多代码再次对记录进行过滤),但此选项听起来更加费力。
谢谢!
答案 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和弹性搜索使用)提供了一个调试功能,可用于详细显示返回记录的分数是如何组成的,因此您可以查看查询的哪个部分。
答案 3 :(得分:-1)