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

Laravel 5中如何编写含AND、OR、AND的WHERE子句?

在Laravel中编写包含AND、OR、AND逻辑的WHERE查询

其实Laravel的查询构造器专门针对这种带分组的逻辑条件做了支持,直接用普通的where和orWhere容易导致逻辑混乱,关键是用闭包来创建分组的WHERE子句,我给你分两种常见场景举例:

场景1:主逻辑为AND,中间嵌套OR分组

比如你要实现的SQL是:

SELECT * FROM your_table 
WHERE column1 = ? 
AND (column2 = ? OR column3 = ?) 
AND column4 = ?

对应的Laravel代码写法:

$results = DB::table('your_table')
    // 第一个AND条件
    ->where('column1', '=', $value1)
    // 用闭包包裹OR分组,自动生成括号
    ->where(function ($query) use ($value2, $value3) {
        $query->where('column2', '=', $value2)
              ->orWhere('column3', '=', $value3);
    })
    // 最后一个AND条件
    ->where('column4', '=', $value4)
    ->get();

这里的闭包会把内部的where和orWhere包裹在括号里,完美实现AND (OR) AND的逻辑。

场景2:OR连接两个AND分组

如果你的需求是类似这样的SQL:

SELECT * FROM your_table 
WHERE (column1 = ? AND column2 = ?) 
OR (column3 = ? AND column4 = ?)

对应的Laravel代码:

$results = DB::table('your_table')
    // 第一个AND分组
    ->where(function ($query) use ($value1, $value2) {
        $query->where('column1', '=', $value1)
              ->where('column2', '=', $value2);
    })
    // OR连接第二个AND分组
    ->orWhere(function ($query) use ($value3, $value4) {
        $query->where('column3', '=', $value3)
              ->where('column4', '=', $value4);
    })
    ->get();

额外提示

  • 如果你用Eloquent模型,写法和查询构造器完全一致,把DB::table('your_table')换成你的模型类即可,比如YourModel::where(...)
  • 这种方式会自动帮你处理参数绑定,避免SQL注入,比直接拼接原生SQL安全得多
  • 更复杂的嵌套逻辑也可以用同样的方式,多层嵌套闭包就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:16:34