场景描述

需要根据商品分类、商品名称和条形码这三个查询条件去取出结果集,这三者的关系是:商品分类 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]);

最新文章

  1. C++重载new和delete运算符
  2. 身份证校验(c++实现)
  3. GridView按钮事件
  4. spring事务配置的坑
  5. C primer plus 读书笔记第六章和第七章
  6. poj 3660 Cow Contest (传递闭包)
  7. linux环境变量入门
  8. Linux下将Apache(httpd)新增为系统服务及开机自启动
  9. pip和cmd常用命令
  10. mvc @html.action() 跨area调用controller 中的action
  11. Luogu2792 [JSOI2008]小店购物
  12. kubernetes yaml格式的Pod配置文件
  13. pandas DataFrame(2)-行列索引及值的获取
  14. NIO,AIO,BIO
  15. 霍夫曼编码(Huffman Coding)
  16. C#基础第三天-作业答案-集合-冒泡排序-模拟名片
  17. 页面返回刷新或H5监听(手机的)返回键
  18. 使用Maven简单配置Mybatis
  19. [洛谷P3376]【模板】网络最大流(ISAP)
  20. bzoj3669: [Noi2014]魔法森林 lct版

热门文章

  1. java设计模式2————工厂模式
  2. Spring的aop思想
  3. jsp简单实现交互
  4. js dom一些操作,记录一下自己写的没有意义,可以简略翻过 第八章
  5. DaSiamRPN学习
  6. 再次聚焦DOCKER MACHINE CODE 2048
  7. Thread.yield( )方法
  8. CyclicBarrier与CountDownLatch区别
  9. emmet笔记
  10. 基于 webGL 的元素周期表 3D 交互展示