使用 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 搜索的主要内容,如果未能解决你的问题,请参考以下文章