You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中组合OR与AND条件的查询实现方案

在Laravel中实现指定SQL查询的方法

要实现你给出的SQL语句:

select * from table where (x = 1 OR y = 1) AND starting_at < '2018-05-01'

Laravel的查询构建器可以通过闭包处理分组的OR条件,完美对应原生SQL里的括号分组逻辑,下面是具体实现方式:

方法一:使用查询构建器(DB门面)

直接用DB::table()构建查询,用闭包包裹OR条件确保它们被分组:

$results = DB::table('table')
    ->where(function ($query) {
        $query->where('x', 1)
              ->orWhere('y', 1);
    })
    ->where('starting_at', '<', '2018-05-01')
    ->get();

这里的闭包会生成SQL里的(x = 1 OR y = 1)部分,外层的where则负责AND starting_at < '2018-05-01'的条件,和原生SQL逻辑完全一致。

方法二:使用Eloquent模型(若有对应模型)

如果你已经为table表创建了Eloquent模型(比如命名为YourModel),可以直接在模型上调用查询方法:

$results = YourModel::where(function ($query) {
        $query->where('x', 1)
              ->orWhere('y', 1);
    })
    ->where('starting_at', '<', '2018-05-01')
    ->get();

额外提示

  • 如果日期是动态变量,建议用Carbon实例处理,确保日期格式正确且避免手动格式化出错:
    use Carbon\Carbon;
    
    $targetDate = Carbon::parse('2018-05-01');
    $results = DB::table('table')
        ->where(function ($query) {
            $query->where('x', 1)->orWhere('y', 1);
        })
        ->where('starting_at', '<', $targetDate)
        ->get();
    
  • 可以调用toSql()方法验证生成的SQL是否符合预期,比如:
    $generatedSql = DB::table('table')
        ->where(function ($query) {
            $query->where('x', 1)->orWhere('y', 1);
        })
        ->where('starting_at', '<', '2018-05-01')
        ->toSql();
    
    打印$generatedSql就能看到和你原生SQL一致的语句。

内容的提问来源于stack exchange,提问作者oofy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:53:22