【发布时间】:2020-06-10 00:54:14
【问题描述】:
我已经阅读了几篇类似的帖子并尝试了它们,但它仍然不适用于我的网站。
当我搜索“认为”一词时,搜索结果显示“我认为就是这样”。 但是,当我搜索“我认为”时,结果是“找到 0 个匹配项”。
所以为了实现多词搜索,我做了如下:
控制器.php
$keyword = "I think"
$words = explode(' ', $keyword);
$data = Post::where(function ($query) use ($words)
{
foreach($words as $word){
$query->where('example', 'LIKE', '%' . $word . '%');
}
})->get();
但是,结果是一样的。 “思考”显示结果。 “我认为”没有任何结果。
也使用dd($data)进行调试
// $keyword = "think"
"select * from `posts` where (`example` LIKE ?)"
// $keyword = "I think"
"select * from `posts` where (`example` LIKE ? and `example` LIKE ?)"
那么会有什么问题呢?谢谢。
[附加信息(已编辑)]
$bindings = $query->getBindings();
dd($bindings);
// array:2 [▼
0 => "%I%"
1 => "%think%"
]
【问题讨论】:
-
您也可以在这里发布您的绑定输出吗?
$query->getBindings(); -
@ITDesigns-eu 我添加了。
-
我认为你现在的问题是你的问题:) 你的绑定应该看起来像
%I%,%think%。所以问题出在你的 $keyword 上……你确定 I 和 think 之间的空格与 explode 函数中的空格一样吗? -
另外,你不需要打破我认为,
LIKE "%I think%"应该可以正常工作 -
@ITDesigns-eu 感谢您的建议!所以我检查了
print_r($words);然后结果是Array ( [0] => I [1] => think )所以 $keyword explode 看起来仍然有效。同样不使用explode,搜索必须去LIKE "%I think%",但是,仍然是相同的结果。它不起作用。嗯...