我想搜索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的页面。
如何解决?
答案 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%'
)