Currently I am working on a project in Laravel but I am stuck.I want to create a SQL statement like this:

SELECT * FROM SPITems WHERE publisher_id=? AND feed_id=? AND (title LIKE '%?%' OR description LIKE '%?%')

现在我有了这个代码:

$query = SPItem::orderBy('title');
if(isset($_GET['publisherID']) && is_numeric($_GET['publisherID']))
{
    $query = $query->where('publisher_id', $_GET['publisherID']);
}
if(isset($_GET['productFeedID']) && is_numeric($_GET['productFeedID']))
{
    $query = $query->where('program_id', $_GET['feedID']);
}
if(isset($_GET['search']))
{
    $query = $query->orWhere('title', 'like', '%' . $_GET['search'] . '%');
    $query = $query->where('description', 'like', '%' . $_GET['search'] . '%');
}

但这会产生:

SELECT * FROM SPITems WHERE (publisher_id=? AND feed_id=?) OR (title LIKE '%?%') AND description LIKE '%?%'

How can I get the correct "or" order?

推荐答案

查看文档中的Logical Grouping部分:

https://laravel.com/docs/master/queries#logical-grouping

它解释了如何在WHERE子句中对条件进行分组.

It should be something like:

if(isset($_GET['search']))
{
    $query->where(function($query){
        $query->where('title', 'like', '%' . $_GET['search'] . '%')
              ->orWhere('description', 'like', '%' . $_GET['search'] . '%');
    });
}

Laravel相关问答推荐

子目录中具有Vue实例的Laravel不起作用

Laravel中如何动态更改路由链接?

找不到 Laravel 5 类日志(log)

如何将用户对象绑定到中间件中的请求

实施 Payum/Laravel 定期付款

使用 Laravel 限制多态多对多关系中的相关记录

Laravel 5.1 是否与 PHP 7 兼容

如何在同一行显示 Laravel artisan 命令输出?

Laravel 中的合同和 PHP 中的接口有什么区别?

使用限制排队 Guzzle 请求

SQLSTATE [42000]:语法错误或访问冲突:1066 Not unique table/alias on relationship

使用模型工厂、一对一和一对多关系定义 Laravel 外键,而不创建不必要的模型

Laravel - 批量分配异常错误

如何在 Laravel 5.1 中改变环境?

laravel 4:更新行时如何从列的当前值中减一?

如何在 Laravel 4 中使用 SHA1 加密而不是 BCrypt?

Laravel 5.1-5.8 中以前的路由名称

如何以及在哪里可以使用 laravel 存储图像?

登录后 DevTools 无法解析 SourceMap 错误将重定向到该 js 文件

在 Laravel 5 中找不到类App\Http\Controllers\admin\Auth