这里的where()是thinkphp5连贯查询中的where方法,不是数据库的where

一、需求

项目中需要做筛选,数据库查询的筛选中无非就是使用where进行各种判断,如果使用字符串拼接的话当然是没有问题的。

但是字符串拼接肯定要用到预处理之类来保证绝对的安全的。

而框架中给出的where()连贯操作(至少我觉得thinkphp5的连贯操作或者是模型已经好了太多太多了),where()能够帮助我们更好的去处理筛选功能。

二、注意的问题

Thinkphp5 使用的是 5.05版本 ,因为 ThinkPHP5.04版本中,是不支持多次where查询的。

也就是说,后面的where会将前面的where给替换掉,如果查询的filed一样的话

5.04 版本之后,支持对同一个字段调用同一个查询方法。

QQ截图20170520165514.jpg

三、使用方式

我自己 几乎不用字符串的方式拼接where,都是使用where操作数组

使用where数组条件进行操作

文档地址:

一个简单的例子:

  • 筛选过程中,有的字段是需要完全相等,而有的字段需要进行范围查询,比如 >= 或者 <=
  • 至于 between and 还是<= / >= ,我的业务中,可以只有左边界或者只有右边界,因此我就用了 <= / >=

示例代码:

// 构建查询条件
$where = [
    'kind' => $kind,
    'cid' => $cid,
];
if(strlen($trademark)!=0){
    $where['trademark']=$trademark;
}
if(strlen($still_mills)!=0){
    $where['still_mills']=$still_mills;
}
if($min_width-0.00!=0){
    $where['width']=['>=',$min_width];
}
if($max_width-0.00!=0){
    $where['width']=['<=',$max_width];
}

/**
*  数据查询
**/
$list=$Post->where($where)->limit(1.','.10)->select();

由于自己的低级错误上面的代码并不能很好的执行,已经进行过改进并且说明了原因,详细请查看文章地址:

使用<= >=好处就是能够自己决定边界,between and 在mysql中是包含边界内容的。