当我们进行一个模糊查询的时候,我们可能要带上其他的条件进行查询
这个时候一些朋友就有可能犯这样的一个错误。
例如
$where['status'] = 1;//查询状态为1的数据
$where['name'] = ['like',"%".$name."%"];
这样去执行的话,thinkphp6不会报错,当我们打印getLastSql的时候,你会发现
很神奇。以下是我自己测试打印的sql,
"SELECT `id`,`proCode`,`name`,`market`,`photo` FROM `hgc_base_direction` WHERE `name` IN ('like','%苹果%') AND `status` = 1 AND `hasCert` = 1 LIMIT 0,10"
你们会发现,哎,咋个like查询变成了in查询,是不是很窝火。
我们看下这个源码他是怎么执行的
这是tp6的源码where 逻辑and查询,中间的代码没执行就不看了,直接看最后一句它调用了parseWhereExp那我们直接去这个方法看下这个方法直接看373,374行你这里field过来是个数组,所有又调用了parseArrayWhereItems其他的也不用看,我们再去看下
ook,重点来了,就是这个家伙捣的鬼(再次申明不是程序bug,只是你写错了),看到第463行是不是心都凉了,咋个就给我变成了in查询咧。
其实是你自己写错了。
正确的代码应该是这样写的
$where[] = ['name','like',"%".$name."%"];
$where[] = ['status','=',1];
这样就好了~~~~