[学习教程] Laravel 系列:orWhere 条件式

[复制链接]
haoyangtian实名认证 手机认证 视频认证 发表于 2018-9-30 11:09:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  闭包
  这种方式将 or 部分写成 closure 传入 where(),与 Eloquent 风格一致,可读性较好。代码如下:
  1. if (!empty($keyword)) {
  2.     $goodsModel = $goodsModel->where(function ($query) use ($keyword) {
  3.         $query->where('name', 'like', "%{$keyword}%")->orWhere('barcode', 'like', "%{$keyword}%");
  4.     });
  5. }
复制代码

  原生
  实在想不出怎么写,就写原生 SQL 好了。这也是最后一种保险但不提倡的做法了吧,代码如下:
  1. if (!empty($keyword)) {
  2.     $keyword = "%{$keyword}%";
  3.     $goodsModel = $goodsModel->whereRaw('(name like ? or barcode like ?)', [$keyword, $keyword]);
  4. }
复制代码
需要注意的是,单引号里面的括号是不能省略的,否则一样会导致这三者的关系是:商品分类 and 商品名称 or 条形码

占位符

  再友情提示一下,你可能会对 like ? 觉得奇怪,我第一次写的时候直接是 whereRaw('name like "%?%"', [$keyword]'),但是这样是没效果的,原因是占位符是对某一个完整的值进行占位,而不是简单的替换效果,所以需要将 like 的参数全部用 ? 替代,将百分号的拼接放在后面的占位数组的变量中去。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

专注源码分享,教程分享
全国服务电话

187-8198-7163

周一至周8:00-22:00

反馈建议

cdhaoyt@163.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.2© 2001-2013 Comsenz Inc.( 蜀ICP备16032957号-1