【问题标题】:Search multiple words in same column on laravel在 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 的标题。如果任何标题只包含茶,那么它也会出现在我的代码中。

标签: jquery laravel search eloquent


【解决方案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();

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 2017-01-08
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2014-03-23
    • 2021-05-01
    相关资源
    最近更新 更多