thinkphp3.1.3源码分析(4)连贯操作where方法

来源:互联网 发布:淘宝小技巧 编辑:程序博客网 时间:2024/05/14 06:01

我们常用实例化Model对象之后使用where()方法,传的多的是字符串和数组。使用起来非常方便,但是有时候我们想使用数组的方式传参,又想在其中添加逻辑判断,比如默认的是and ,我现在想换成or,怎么办呢?实际where()方法已经考虑到这个了,看看代码吧!

方法/步骤

  1. 当有N个(N>=2)个where['field']=xxx的时候,默认的运算规则是AND,但是当我们想使用OR的时候,得分成多个子查询,先从2个条件或者开始说起吧。

    如下代码所示,首先是查看是否有键值为_logic的元素,如果有,那么就把$where['_logic']对应的值作为运算规则($operate)。

    然后删除$where['_logic'],对其他元素遍历,然后使用$operate连接。

    最后,最把最后组成的字符串中的最后一个$operate删掉。

    thinkphp3.1.3源码分析(4)连贯操作where方法
  2. 但是那么如果,我们又想写AND,又想写OR呢?

    哈哈,是的,应该如何处理呢?

    这里借助官方的例子(截图)说明

    thinkphp3.1.3源码分析(4)连贯操作where方法
  3. 如上图所示,那样相当于是$where是$map元素,查询的时候传入的是where($map)

    if(0===strpos($key,'_'))

    $whereStr   .= $this->parseThinkWhere($key,$val);

    thinkphp3.1.3源码分析(4)连贯操作where方法
  4. 4

    然后进入parseThinkWhere()

    substr($this->parseWhere($val),6);

    这样就删掉了' WHERE'再与之前的拼接。

0 0
原创粉丝点击