我已经阅读了几篇类似的文章,并尝试了它们,但仍然不适用于我的网站。
当我搜索单词“ think”时,搜索结果显示“我认为就是这样”。 但是,当我搜索“我认为”时,结果是“找到0个匹配项”。
所以要实现多个单词的搜索,我做了以下工作:
Controller.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%"
]
答案 0 :(得分:1)
我建议为此使用Laravel侦察兵。但也可以在sql中执行模糊文本搜索。 或者...假设我们不使用MYSQL匹配功能,而我们使用的是雄辩的laravel。 1)分割字符串。 2)使用查询生成器。
$words = explode(' ', $searchString);
$results = Post::where(($q) use ($words) {
$firstWord = array_shift($words);
$q->where('example', $firstCase);
foreach($words as $word) {
$q->orWhere('example', $word);
}
})->get();
答案 1 :(得分:0)
已解决
那是我的坏事。 在我的blade.php上,有一行
@if (preg_match("/^[0-9a-zA-Z]*$/",$keyword))
此正则表达式没有空格,这就是为什么它不起作用的原因。 所以只需更改为:
@if (preg_match("/^[0-9a-zA-Z ]*$/",$keyword))
然后完全奏效了。
感谢您对老师的帮助。