如何在Laravel Eloquent查询构建器中正确执行where查询?

3

请看以下查询:

    $testQuery = Customer::where('company_id', auth()->user()->company_id);

    $testQuery
        ->where('name', 'like', '%test%')
        ->orWhere('age', '>', 22);

    dd($testQuery->toSql());
这会产生以下SQL查询语句: ``` select * from customers where (company_id = ? and name like ? or age > ?) and customers.deleted_at is null ``` 我需要的是这样的东西: ``` select * from customers where company_id = ? and (name like ? or age > ?) and customers.deleted_at is null ``` 我要如何实现这一点? 即 company_id = ? 的第一个条件比对nameage的过滤器更重要? 现在,基于查询构建器构建查询的方式,我看到的结果来自于我在查询中指定的公司之外的公司。

你正在使用哪个版本的Laravel? - Salim Djerbouh
我正在使用 Laravel 6。 - Latheesan
1个回答

4

我相信您希望使用参数分组

通过使用闭包,您可以告诉查询构建器应该被括在括号中的内容:

$testQuery = Customer::where('company_id', auth()->user()->company_id)
                     ->where(
                         function ($query) {
                           $query->where('name', 'like', '%test%')
                                 ->orWhere('age', '>', 22);
                      })->get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,