【问题标题】:How can I perform where queries correctly in laravel eloquent query builder如何在 laravel eloquent 查询生成器中正确执行 where 查询
【发布时间】:2020-01-22 11:50:06
【问题描述】:

看看下面的查询:

    $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 > ?) 和 customers.deleted_at 为空

我所追求的是这样的:

customers 中选择 * company_id = ?和 (name 喜欢 ? 或 age > ?) 和 customers.deleted_at 为空

我怎样才能做到这一点?即company_id = ? 的第一个条件比nameage 上的其他过滤器更重要?

现在,根据查询构建器构建查询的方式,我看到的结果来自其他 company_id,而不是我在查询中指定的那个。

【问题讨论】:

  • 你使用的是什么版本的 Laravel?
  • 我使用的是 laravel 6。

标签: php sql laravel eloquent query-builder


【解决方案1】:

我相信你想使用parameter grouping

通过使用闭包,您可以告诉查询生成器应该用括号括起来的内容:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 2014-05-13
    • 1970-01-01
    • 2018-01-03
    • 2019-05-06
    • 2017-09-28
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多