2015-05-29 128 views
2

我要搜索其LANG_ID = 1的网页,我使用以下laravel查询orWhere给人意想不到的结果

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

它给了我比1 LANG_ID其他太页面。

如何解决?

回答

1

这是因为您构建查询以返回所有具有此lang_id和title的记录,或者以某个搜索关键字开始的描述。这就是为什么你会得到另一个结果,因为其中一些不符合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%' 
) 
+0

谢谢你帮仍然存在,我们需要通过使用$搜索错误否则会给出例外。 – alishaukat

+0

@alishaukat你是对的我编辑了我的答案。 – shaddy