tp8模型中的where查询条件为数组且使用大于,小于,like等条件时的使用方式和之前的tp5/6等版本的使用区别如下:
thinkphp8 中的where数组查询条件
大于 >, 小于, like等条件时使用方法:
// 查询user表中id大于2, name以张开头的用户
$user = User::where([['id', '>','2'],['name','like','%'.'张']])->select();
// 最后生成的sql如:
// SELECT * FROM `tms_user` WHERE ( `id` > 2 AND `real_name` LIKE '%张' ) AND `tms_user`.`delete_time` IS NULL
注意这里的where数组条件里面有多个时使用的是二维数组的形式,既 [ [条件1], [条件2] ],
当条件是等于=时,如果是多个,使用 [ ['id', '=','2'] ], 如果只有一个条件/或者条件是等于 则可以只用索引数组, 如: ['id'=>'2', 'real_name'=>'张三' ], 对于这种情况下的where就和tp5,6是一样的了。如下示例:
User::where(['id'=>'2','real_name'=>'张三'])->select();
// SELECT * FROM `tms_user` WHERE ( `id` = 2 AND `real_name` = '张三' ) AND `tms_user`.`delete_time` IS NULL
注意:在thinkphp8中,索引数组的where条件会生成IN的查询条件, 如:where( ['id'=>[1,2,3]] ) 最后生成的SQL是 `id` IN (1,2,3)
thinkphp5/6的where数组条件中大于,小于,like的使用
注意这里的大于,小于,like条件是对某个字段使用条件数组,
// 查询user表中id大于2, name以张开头的用户
$user = User::where(['id'=>array('>','2'),'name'=>array('like','%'.'张')])->select();
tp5中的in, not in等查询条件的构建
$whereArr['id'] = array('eq',100); // 等效于:$map['id'] = 100;
$whereArr['id'] = array('neq',100); // id != 100
$whereArr['id'] = array('gt',100); // id > 100
$whereArr['id'] = array('egt',100); // id >= 100
$whereArr['id'] = array('lt',100); // id < 100
$whereArr['id'] = array('elt',100); // id <= 100
$whereArr['id'] = array('in','1,5,8'); // id in(1,5,8)
$whereArr['id'] = array('not in','1,5,8'); // id not in(1,5,8)
$whereArr['id'] = array(array('gt',3),array('lt',10), 'or'); // (id > 3) OR (id < 10)
$whereArr['id'] = array('between','1,8'); // id BETWEEN 1 AND 8
exp 综合表达式 $whereArr['id'] = array('exp','in(1,3,8)');
示例: $res = db('user')->filed(*)->where($whereArr)->select();
where字符串条件和其他情况
字符串条件和其他情况tp8, tp5,6他们的where的构造方式是一样的,如下示例:
where('email', 'like', '%abc%') // email like '%abc%'
where('real_name', '张三') // real_name='张三'
where('id', 1) // id=1
只有一个条件时大于,小于,like等的使用tp8,6,5,3他们的使用方法都是一样的,如
where('id','>',10) // 生成的SQL: id > 10