Thinkphp5.1中的where null表达式到底怎么写?EXP查询表达式错误解决办法

176次阅读

共计 1169 个字符,预计需要花费 3 分钟才能阅读完成。

项目开发过程中使用到组合表达式进行 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 时的条件

但显然,这个方法会直接报错,如下:

Thinkphp5.1 中的 where null 表达式到底怎么写?EXP 查询表达式错误解决办法

还有的说应该用 EXP 写这样的表达式:

1
$where[‘status’]=array(‘EXP’,‘IS NULL’);

Thinkphp5.1 中的 where null 表达式到底怎么写?EXP 查询表达式错误解决办法

显然也是不行的。

正确写法

尝试了不少网上给的表达式,发现都会出错,最后从 exp 报错角度出发,多次测试后,得到了这样的表达式,并且能正常工作:

Null 的写法

1
$workerJobStr[‘worker_job’] = [‘exp’,thinkDb::raw(‘is null’)];

not Null 的写法

1
$workerJobStr[‘worker_job’] = [‘<>’,‘null’];

正文完
 0