php - Laravel 查询生成器 : Multiple where/orWhere and precendence of and/or

标签 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 ?)

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

谢谢
Pida

最佳答案

问题是,在你的闭包中你正在“使用”$query。 $query 作为参数传递,您不应在 use() block 中再次声明它。

正确的代码是:

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

关于php - Laravel 查询生成器 : Multiple where/orWhere and precendence of and/or,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34878251/

相关文章:

PHP PDO MySQL 无异常或错误

mysql - 带有 Group by 的 MAX() 函数非常慢

php - 解释 Laravel Pusher 的错误

phpmyAdmin 错误我不明白

php - 为什么 PHP 的垃圾收集器会降低性能,没有它如何管理内存?

php mysqli WHERE IN (?,?,? ...)

php - 通过 LIMIT 1 获取最后一次登录 - PHP 和 MYSQL

mysql - 查找*没有*标志的所有行(SET 数据类型)

javascript - 使用 php artisan serve 无法在公共(public)文件夹中加载任何 js/css?

laravel 随机调度命令