我想搜索整个表格,我现在拥有它的方式是搜索表格中的某个列。如何从表中搜索所有内容而不是表中的某个列?如果你需要看到我的代码,这是我的代码
$userinput=$request->input('mywhat');
$userinputt=$request->input('mywhere');
$str = trim(preg_replace('/\s+/',' ', $userinput));
$strr = trim(preg_replace('/\s+/',' ', $userinputt));
$this->validate($request,array(
$userinputt=>'nullable',
));
$pro=Profile::Where('what','Like','%'.$str.'%')->Where(function ($query) use($strr, $userinputt) {
$query->Where('location', 'LIKE', '%'.$userinputt.'%');
})->inRandomOrder()->paginate(15);
return view('layouts.reveal')->with('pro',$pro);
答案 0 :(得分:1)
like
没有捷径,
您可以尝试使用MATCH()
:
$pro = Profile:whereRaw("MATCH(`name`, `foo`, `bar`) AGAINST ('$search')");
但 您可以使用nicolaslopezj/searchable包,它易于定制,并且还支持连接。
答案 1 :(得分:0)
这样的事情可能有所帮助:
$attributes = $profile->attributes;
$query = null;
foreach($attributes as $attribute) {
if(!$query) {
$query = Profile::where($attribute, 'like', '%'.$searchTerm.'%');
} else {
$query = $query->orWhere($attribute, 'like', '%'.$searchTerm.'%');
}
}
$results = $query->get();
我不建议将上述代码用于任何生产用途,而是可以使用已完成的OS库,如Searchy或其他。
答案 2 :(得分:0)
您可以尝试以下内容:
$query = Profile::select('*');
foreach((new Profile)->attributesToArray() as $column)
{
$query->where($column, 'like', "%$search_value%");
}
$models = $query->get();
但是,随着数据集的增长,性能将成为一个问题。您可能需要考虑Laravel Scout之类的解决方案,该解决方案可以在雄辩的模型上提供全文搜索。
这通过在默认情况下创建/更新模型的整个toArray
形式的索引来工作。您可以利用Queues获得更多性能优势。
然后您的搜索简化为:
$models = App\Model::search('Search Term')->get();