项目开发过程中使用到组合表达式进行where查询,所有条件都是前端传送到后端,其中有一个条件与其他不同,需要表示为Null,也就是返回给前端所有该字段未空的结果。
但参考官方文档https://www.kancloud.cn/manual/thinkphp5_1/354004,也通过搜索引擎找了一些资料,发现结果都不尽如人意。
1 2 3 4 |
Db::name('user')->where('name', null) ->where('email','null') ->where('name','not null') ->select(); |
1 2 3 |
Db::name('user')->where('title','=', 'null') ->where('name','=', 'not null') ->select(); |
比如https://blog.csdn.net/weixin_43930641/article/details/105238748给出了“正确”的表达式:
1 2 |
$map[] = ['字段名','null',''];//查询为NULL时的条件 $map[] = ['字段名','not null',''];//查询不是NULL时的条件 |
但显然,这个方法会直接报错,如下:
还有的说应该用EXP写这样的表达式:
1 |
$where['status']=array('EXP','IS NULL'); |
显然也是不行的。
正确写法
尝试了不少网上给的表达式,发现都会出错,最后从exp报错角度出发,多次测试后,得到了这样的表达式,并且能正常工作:
Null的写法
1 |
$workerJobStr['worker_job'] = ['exp',\think\Db::raw('is null')]; |
not Null的写法
1 |
$workerJobStr['worker_job'] = ['<>','null']; |
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/10475