在 laravel 的同一列中搜索多个单词
Posted
技术标签:
【中文标题】在 laravel 的同一列中搜索多个单词【英文标题】:Search multiple words in same column on laravel 【发布时间】:2020-12-10 16:41:08 【问题描述】:我需要在 laravel 的 title
列中搜索多个单词。就像我搜索tea break
一样,我只需要获取标题内容tea
和break
的那些行。如果任何标题只包含茶,那么它不会出现在我的结果中。我在下面添加了代码,但它的 fetch 也只包含一个单词行。
$query->where('title', 'LIKE', "%$search%");
如果我搜索 Hello Tea break
然后只获取包含所有三个单词的行。那是hello
,tea
,break
。
如果我搜索Hello Tea & break
。在这种情况下,我将从我的代码中删除所有空格字符,并在下面的数组中添加代码。
$search = []
$search[0] = 'Hello';
$search[1] = 'Tea';
$search[2] = 'break'
【问题讨论】:
多个 LIKE 类型的 where 子句应该这样做 你是对的,但我只需要获取那些包含tea
和 break
的标题。如果任何标题只包含茶,那么它也会出现在我的代码中。
【参考方案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 的同一列中搜索多个单词的主要内容,如果未能解决你的问题,请参考以下文章