Laravel查询生成器:多个where / orWhere和precendence of和/或

时间:2016-01-19 13:37:41

标签: php mysql laravel

我想在使用Laravel 5.1的SQL查询中使用一些搜索词。这是我的代码

foreach ($searchTerms as $term) {
    $query->where(function($query) use ($query, $term){
      $query->where("profiles.text", "LIKE", "%{$term}%")
            ->orWhere("protocols.text", "LIKE", "%{$term}%");
    });
  }

这是我从中得到的SQL:

where 'profiles'.'text' LIKE ? or 'protocols'.'text' LIKE ? and
'profiles'.'text' LIKE ? or 'protocols'.'text' LIKE ?

这就是我需要的SQL:

where ('profiles'.'text' LIKE ? or 'protocols'.'text' LIKE ?) and
('profiles'.'text' LIKE ? or 'protocols'.'text' LIKE ?)

如何获取正确的查询字符串?

感谢
皮达

2 个答案:

答案 0 :(得分:3)

问题是,在你的关闭中你是"使用" $查询。 $ query作为参数传递,你不应该在use()块中再次声明它。

正确的代码是:

foreach ($searchTerms as $term) {
    $query->where(function($query) use ($term){
        $query->where("profiles.text", "LIKE", "%{$term}%")
            ->orWhere("protocols.text", "LIKE", "%{$term}%");
    });
}

答案 1 :(得分:0)

试试这个

$query->where(function($query) use ($query, $term){
  $query->where("profiles.text", "LIKE", "%{$term}%")
        ->orWhere("protocols.text", "LIKE", "%{$term}%");
});
$query->where(function($query) use ($query, $term){
  $query->where("profiles.text", "LIKE", "%{$term}%")
        ->orWhere("protocols.text", "LIKE", "%{$term}%");
});