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

转:Laravel 项目开发规范

Laravel/Eloquent 规范化 JSON 响应的关系?

如何在 Laravel 中 “规范” 的开发验证码发送功能

如何在 Laravel 中 “规范” 的开发验证码发送功能

Laravel框架开发规范-修订版

yajra/laravel-datatables 搜索不适用于 laravel 5.4