Laravel 5.1:SQL查询'LIKE%word%word%word%'无效

时间:2015-11-26 16:47:54

标签: php mysql laravel laravel-5 eloquent

请记住,我的SQL经验很少,所以我可能做错了。

我正在尝试设置搜索表,但只是搜索用户输入的字符串并不理想,因为虽然某些内容可能会出现“steve”,但如果用户输入“steve jobs story”,则无法匹配如果那不存在,因为它将寻找整个字符串而不是分别查找每个单词。

我尝试通过将字符串爆炸成数组然后将其与%s分开来进行分解,因此像“steve jobs story”这样的搜索将是“steve%jobs%story”,并且查询它将是“%steve%jobs%story%”。当我尝试搜索这个时,我没有得到任何错误,但查询没有找到任何错误,而当我只输入一个单词时,它就有效,所以我猜测我不想做的事情。

有人能指出我正确的方向吗?这是我的控制器/型号:

// 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%");
}

1 个答案:

答案 0 :(得分:4)

您可以使用循环将查询附加到orWhere,如此

library(sqldf)
sqldf("select df_a.id
            , case
                  when df_b.q1 = 1 then df_a.q1
                  else 0
              end as value
       from df_a
            inner join df_b on df_a.id = df_b.id")