php - 拉维尔 5.1 : SQL query 'where LIKE %word%word%word%' not working

标签 php mysql laravel laravel-5 eloquent

请记住,我的 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/

相关文章:

phpDocumentor 制表符分隔符

mysql - PHPMyAdmin 重复表的行,每行数据相同,但主键位数较少

php - 在smarty中执行多维sql代码

laravel - Vue 多选 laravel 提交表单

php - 重定向到新页面后 Laravel Auth session 丢失

laravel 4 api 文档 - 如何快速找到函数?

php - 以编程方式从图像文件和/或 PSD 中提取图案

php - 如果我在 C2DM 中注册多个 Android 设备,我会收到多个注册 ID

javascript - 在多个 if 中启用 javascript?

mysql - 如何获取每个来源的当前余额,然后获取其占所有来源总和的百分比