请记住,我的 SQL 经验很少,所以我可能做错了。
我正在尝试设置对表的搜索,但仅仅搜索用户输入的字符串并不理想,因为尽管可能会出现“steve”的内容,但如果用户输入“steve jobsstory”,则不会匹配任何内容如果不存在,因为它将查找整个字符串,而不是分别查找每个单词。
我尝试通过将字符串分解为数组,然后将其内爆并用 % 分隔来分解它,因此像“steve jobs Story”这样的搜索将是“steve%jobs%story”,并且用我的查询它将是“%steve%jobs%story%”。当我尝试搜索这个时,我没有收到任何错误,但查询什么也没找到,而当我只输入一个单词时,它就可以工作,所以我猜我想做的事情是不允许的。
有人能指出我正确的方向吗?这是我的 Controller /模型:
// Controller
$query = $request->get('q');
$explodedQuery = explode(" ", $query);
$newQuery = implode("%", $explodedQuery);
$articles = Article::isLikeTitle($newQuery)
->isLikeBody($newQuery)
->latest('published_at')
->published()
->paginate(10);
// Model
public function scopeIsLikeTitle($query, $q)
{
return $query->where('title', 'LIKE', "%$q%");
}
public function scopeIsLikeBody($query, $q)
{
return $query->where('body', 'LIKE', "%$q%");
}
最佳答案
您可以使用循环将查询附加到 orWhere ,如下所示
$query = $request->get('q');
$explodedQuery = explode(" ", $query);
$articles = Article::isLikeTitle($explodedQuery)
->isLikeBody($explodedQuery)
->latest('published_at')
->published()
->paginate(10);
// Model
public function scopeIsLikeTitle($query, $q)
{
foreach($q as $eachQueryString)
{
$query->orWhere('title', 'LIKE', '%'.$eachQueryString .'%');
}
return $query;
}
public function scopeIsLikeBody($query, $q)
{
foreach($q as $eachQueryString)
{
$query->orWhere('body', 'LIKE', '%'.$eachQueryString .'%');
}
return $query;
}
关于php - 拉维尔 5.1 : SQL query 'where LIKE %word%word%word%' not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943607/