如何编写满足多规则的SQL筛选条件(Laravel whereRaw场景)
正确的SQL筛选条件及Laravel实现
核心逻辑表达式
把需求转化为SQL条件,最直观的写法是:
WHERE (type != 1) OR (type = 1 AND item != 1) OR (type = 1 AND item = 1 AND product = 4)
也可以简化为逻辑等价的简洁版本:
WHERE type != 1 OR item != 1 OR (item = 1 AND product = 4)
注:简化版逻辑为:只要type不等于1就全选;如果type等于1,要么item不等于1就全选,要么item等于1且product等于4才选。
Laravel中的实现方式
方式1:使用whereRaw直接写入完整条件
$tables = Table::whereRaw(" (type != 1) OR (type = 1 AND item != 1) OR (type = 1 AND item = 1 AND product = 4) ")->get();
方式2:使用Laravel查询构建器链式调用(更符合框架风格)
$tables = Table::where('type', '!=', 1) ->orWhere(function ($query) { $query->where('type', 1) ->where('item', '!=', 1); }) ->orWhere(function ($query) { $query->where('type', 1) ->where('item', 1) ->where('product', 4); }) ->get();
效果验证
用你提供的输入表测试上述条件,会精准筛选出期望的输出结果:仅排除type=1、item=1、product=5的行,其余所有行全部保留。
内容的提问来源于stack exchange,提问作者Unkown Kid
相关产品推荐
相关产品推荐

