或者给出意想不到的结果

时间:2015-05-29 13:47:38

标签: laravel laravel-4 eloquent laravel-5

我想搜索lang_id = 1的网页,我正在使用以下laravel查询

$result =  $this->where('lang_id', $this->langId );
$result->where('title', 'LIKE', '%'.$search.'%')
       ->orWhere('description', 'LIKE', '%'.$search.'%');
$result->get();

它也为我提供了lang_id不是1的页面。

如何解决?

1 个答案:

答案 0 :(得分:1)

这是因为您构建查询以返回具有此lang_id和标题的所有记录,或者以某些搜索关键字开头的描述。这就是为什么你得到另一个结果,因为他们中的一些人不符合lang_id要求,但他们符合描述匹配。

您需要将您的条件正确分组,如下所示:

$result =  $this->where('lang_id', $this->langId )
->where(function ($query) use ($search) {
    $query->where('title', 'LIKE', '%'.$search.'%')->orWhere('description', 'LIKE', '%'.$search.'%')
});
$result->get();

这等于:

SELECT * FROM table WHERE lang_id = $lang_id AND (
    title LIKE '%$search%' OR description LIKE '%$search%'
)