Laravel 规范搜索
Posted
技术标签:
【中文标题】Laravel 规范搜索【英文标题】:Laravel specification search 【发布时间】:2020-02-16 02:57:32 【问题描述】:我正在建立电子商务网站,我想问一下搜索产品规格的最佳方法是什么。我在数据库中有一个字段,其规格可以存储为 json 或 php 数组。有什么教程可以使用输出独特的规格,例如类别 CPU,并将不同的 CPU 品牌放在该类别下,以便用户可以决定将哪个规格添加到搜索过滤器。为了给你一个视角,我想做这样的事情
Amazon.com search field image
【问题讨论】:
你有所有表的活动模型吗?您将为此雄辩或数据库查询使用什么?为什么您不将要过滤的内容的规格存储在各个列中?为什么是 JSON? @sibabratswain 我是 Laravel 的新手,如果我错了,很抱歉。我有产品表的产品模型。我将使用 Eloquent 并且我不会将规范存储在各个列中,因为规范(比如模型,内存等)从产品到产品的变化,然后需要为此创建 40 多个字段。我考虑 json 因为我真的不知道,但我认为使用 json 因为我不需要像 php 那样序列化和反序列化它数组,我认为它更快,因为我可以很容易地访问它。但我希望有人能告诉我更好的解决方案。 像这样使用 SQL 进行复杂的搜索会非常非常非常慢,我建议使用像 Algolia 这样的服务 @Amar 您没有使用 NoSQL DB,因此在 SQL 中进行过滤,如果您有单独的列,则更合适。您可以实现您想要的,但在查询中,将难以处理为 JSON 中的数据。为了简单起见,您需要获取它并在控制器中进行数组过滤操作。 @Saly3301 你有这样的 algolia 搜索教程吗? 【参考方案1】:您可以通过whereJsonContains()
方法搜索。
例如;
假设您的表单中有一些过滤器,如下所示
brands
- intel
- amd
Number of core
- 2
- 4
- 8
现在让我们构建一个查询以获取过滤结果
Cpu::whereJsonContains("preferences->brand",$request->brand)
->whereJsonContains("preferences->noc", $request->noc)
->get();
但我不确定在您的数据库中存储这样的 json 数据是否是一种好习惯。因为它不是存储和展示柜,所以会有通用的结果取决于那些规范。
【讨论】:
你的答案是我需要的,但我了解到 algolia 是解决这个问题的最佳方法。以上是关于Laravel 规范搜索的主要内容,如果未能解决你的问题,请参考以下文章