在 laravel 的同一列中搜索多个单词

Posted

技术标签:

【中文标题】在 laravel 的同一列中搜索多个单词【英文标题】:Search multiple words in same column on laravel 【发布时间】:2020-12-10 16:41:08 【问题描述】:

我需要在 laravel 的 title 列中搜索多个单词。就像我搜索tea break 一样,我只需要获取标题内容teabreak 的那些行。如果任何标题只包含茶,那么它不会出现在我的结果中。我在下面添加了代码,但它的 fetch 也只包含一个单词行。

$query->where('title', 'LIKE', "%$search%");

如果我搜索 Hello Tea break 然后只获取包含所有三个单词的行。那是helloteabreak

如果我搜索Hello Tea & break。在这种情况下,我将从我的代码中删除所有空格字符,并在下面的数组中添加代码。

$search = []
$search[0] = 'Hello';
$search[1] = 'Tea';
$search[2] = 'break'

【问题讨论】:

多个 LIKE 类型的 where 子句应该这样做 你是对的,但我只需要获取那些包含 teabreak 的标题。如果任何标题只包含茶,那么它也会出现在我的代码中。 【参考方案1】:

您可以实例化一个包含搜索字符串的数组,然后使用集合上的->orWhere() 方法来查找它们。

$keywords = ['hello', 'tea', 'break'];
$result = $query->where(function ($query) use ($keywords) 
    foreach ($keywords as $keyword) 
       $query->orWhere('title', 'LIKE', "%$keyword%");
    
);

【讨论】:

应该是"%$keyword%" 确实@sta,我刚刚添加了它。 这需要是“and where”而不是“or where”,因为他们想要包含所有关键字的结果,而不仅仅是其中的一些?【参考方案2】:
    $search = ['hello', 'tea', 'break'];
    $pages = Page::query();
    foreach ($search as $word) 
        $pages->orWhere('title', 'LIKE', '%' . $word . '%');
    
    $pages = $pages->distinct()->get();

【讨论】:

以上是关于在 laravel 的同一列中搜索多个单词的主要内容,如果未能解决你的问题,请参考以下文章

包含多个世界的列中的全文搜索搜索

laravel 搜索多个以空格分隔的单词

在多个表的所有列中搜索的最简单方法? [复制]

使用 Laravel 在 Json 列中搜索

为啥 Statsmodels OLS 不支持在包含多个单词的列中读取?

如何在laravel的json数组列中找到字符串搜索的位置