laravel orWhere
场景描述
需要根据商品分类、商品名称和条形码这三个查询条件去取出结果集,这三者的关系是:商品分类 and (商品名称 or 条形码)
错误尝试
第一次写出来的代码是这样的:
$goodsModel = $goodsModel->where('name', 'like', "%{$keyword}%")->orWhere('barcode', 'like', "%{$keyword}%");
然后会发现这样的写法会导致三者的关系变成了:商品分类 and 商品名称 or 条形码。
建议使用 where 的闭包方式
这种方式将 or 部分写成 closure 传入 where()
,与 Eloquent 风格一致,可读性较好。代码如下:
DB::table('users') ->where('name', '=', 'John') ->where(function ($query)use ($votes)
{ $query->where('votes', '>', $votes
) ->orWhere('title', '<>', 'Admin'); }) ->get();
原生
实在想不出怎么写,就写原生 SQL 好了。这也是最后一种保险但不提倡的做法了吧,代码如下:
$goodsModel = $goodsModel->whereRaw('(name like ? or barcode like ?)', [$keyword, $keyword]);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通