使用 Laravel 搜索

Posted

技术标签:

【中文标题】使用 Laravel 搜索【英文标题】:Search with Laravel 【发布时间】:2017-04-08 13:20:11 【问题描述】:

我正在尝试搜索多个模型。我已经设置了路由和 html 表单,并且我在控制器中成功接收了数据。现在,我想查询多个列并以 eloquent 或数组的形式获取结果。

实现这一目标的正确方法是什么?

public function search(Request $request) 
     $searchTerm = $request->search;

     // I want to search..
     Content::where('value', '%' . $searchTerm . '%')->get();
     BlogPost::where('value', '%' . $searchTerm . '%')->get();
     // etc..

【问题讨论】:

你能在这一行的末尾添加分号$searchTerm = $request->search;吗? 【参考方案1】:

使用merge()

 $contents = Content::where('column', '%' . $searchTerm . '%')->get();
 $blogs = BlogPost::where('column', '%' . $searchTerm . '%')->get();
 $contents->merge($blogs);

https://laravel.com/docs/5.3/collections#method-merge

另一个选项是联合:

https://laravel.com/docs/5.3/queries#unions

【讨论】:

【参考方案2】:

首先,将like 添加到查询中。然后,如果你想要一个数组,使用toArray() 方法和array_merge() 合并结果:

$result1 = Content::where('value', 'like', '%'.$searchTerm.'%')->get()->toArray();
$result2 = BlogPost::where('value', 'like', '%'.$searchTerm.'%')->get()->toArray();
$result = array_merge($result1, $result2);

如果要获取集合,只需获取数据并将其与merge() helper 合并即可。

【讨论】:

非常感谢。我有个问题。我尝试使用 $result ,但我无法用这种方法得到它。实现它的正确方法是什么?此外,使用 merge() 而不是 array_merge() 会抛出“调用未定义函数 App\Http\Controllers\merge()” @senty here $result is 一个数组或集合,因此您需要使用foreach ($result as $oneRow) 对其进行迭代,然后使用 $oneRow->value 获取循环内的数据。您可以通过将 dd($result) 放入视图中来查看$result 的结构。【参考方案3】:

你只是把结果放在一个变量中?

public function search(Request $request) 
     $searchTerm = $request->search

     // I want to search..
     $contents = Content::where('column', '%' . $searchTerm . '%')->get();
     $blogs = BlogPost::where('column', '%' . $searchTerm . '%')->get();
     // etc..

【讨论】:

@senty 问题有什么不同吗?我只看到不同的列和值。

以上是关于使用 Laravel 搜索的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:高级搜索表单查询

使用 laravel 后端 api 在 vuejs 中搜索

Laravel:使用 ajax 搜索,路由无法正常工作

使用 Laravel 搜索

在 Laravel 中使用标签进行搜索

Laravel 搜索属于