Laravel用喜欢搜索

时间:2018-02-08 16:46:27

标签: laravel search

我想搜索整个表格,我现在拥有它的方式是搜索表格中的某个列。如何从表中搜索所有内容而不是表中的某个列?如果你需要看到我的代码,这是我的代码

    $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);

3 个答案:

答案 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();