thinkphp5 在5.20更新到5.09了,还是升级了,修复了不少东西

QQ截图20170522012519.jpg

之前写过一篇文章关于利用ThinkPHP5的where数组条件做筛选功能,原文地址:

后来在一个业务逻辑中发现一个问题就是:

PHP中数组相同的键值会被覆盖(这竟然是我忘记了的事情,还乐呵呵的写上去了),这样做的结果会导致后面的where条件将前面的条件覆盖掉,这不是框架的问题,而是自己犯的低级错误

正确的where条件拼接方法:

如果要对同一字段进行多次拼接,应该使用二维数组的形式:

 // 宽度
            if($min_width || $max_width){
                $where['width']=array();
                if($min_width-0.00!=0){
                    $where['width']=array(['>=',$min_width]);
                }
                if($max_width-0.00!=0){
                    array_push($where['width'],['<=',$max_width]);
                }
            }

关键点:

1. 如果 $min_weight 或者 $max_weight 不存在,则不允许将 $where['weight'] 声明成数组

  • 这是因为如果没有where条件却声明数组,则thinkphp在查询的时候会报异常

2. 设置同一字段的多次操作的时候,使用 array_push() 操作加入后面的条件,而不是直接重新赋值

3. 尽量都是用数组条件

很遗憾,上面的拼接方式存在问题,如果某个边界值不存在比如,min_width 不存在,而 max_width 存在,在进行where条件解析的时候会报错误。

为此写了一个没有问题的函数来实现这个过程,文章地址: