我们常用实例化Model对象之后使用where()方法,传的多的是字符串和数组。使用起来非常方便,但是有时候我们想使用数组的方式传参,又想在其中添加逻辑判断,比如默认的是and ,我现在想换成or,怎么办呢?实际where()方法已经考虑到这个了,看看代码吧!
方法/步骤
-
当有N个(N>=2)个where['field']=xxx的时候,默认的运算规则是AND,但是当我们想使用OR的时候,得分成多个子查询,先从2个条件或者开始说起吧。
如下代码所示,首先是查看是否有键值为_logic的元素,如果有,那么就把$where['_logic']对应的值作为运算规则($operate)。
然后删除$where['_logic'],对其他元素遍历,然后使用$operate连接。
最后,最把最后组成的字符串中的最后一个$operate删掉。
-
但是那么如果,我们又想写AND,又想写OR呢?
哈哈,是的,应该如何处理呢?
这里借助官方的例子(截图)说明
-
如上图所示,那样相当于是$where是$map元素,查询的时候传入的是where($map)
if(0===strpos($key,'_'))
$whereStr .= $this->parseThinkWhere($key,$val);
-
然后进入parseThinkWhere()
substr($this->parseWhere($val),6);
这样就删掉了' WHERE'再与之前的拼接。