ThinkPHP之where方法

ThinkPHP where()方法是 Model 类内置方法,用于设置数据库查询或者更新、删除等操作条件,是ThinkPHP精髓部分,也是必须掌握的点。下面以查询为例,了解下强大的where方法。 ThinkPHP支持直接使用字符串作为查询条件,但安全性不高,也可以用对象来作为条件查询,效率不高,所以大多数情况推荐使用数组来作为查询条件,因为会更加安全,更高效。

一、使用字符串作为查询条件

例如:

$User = M("User"); // 实例化User对象,user为表名
$User->where('id<10 AND status=1')->select();

最后生成的SQL语句是(表前缀为think_)

SELECT * FROM think_user WHERE id<1 AND status=1
二、使用数组作为查询条件(推荐)

这种方式是最常用的查询方式,例如:

$User = M("User"); // 实例化User对象
$condition['id'] = array('lt',1);//lt可换成附表中其他TP运算符
$condition['status'] = 1;// 把查询条件传入查询方法
$User->where($condition)->select();

最后生成的SQL语句同上。

如果进行多字段查询,那么字段之间的默认逻辑关系是AND,如果逻辑关系是OR,通过使用 _logic 定义查询逻辑:

$User = M("User"); 
$condition['id'] = array('lt',1);
$condition['status'] = 1;
$condition['_logic'] = 'OR';// 把查询条件传入查询方法
$User->where($condition)->select();

最后生成的SQL语句是

SELECT * FROM think_user WHERE `id<1 OR `status`=1
三、使用对象方式来查询(不推荐)

这里以stdClass内置对象为例:

$User = M("User"); 
// 定义查询条件
$condition = new stdClass(); 
$condition->id= array('lt',1); 
$condition->status= 1; 
$User->where($condition)->select();

最后生成的SQL语句和上面一样。

附:

ThinkPHP运算符 与 SQL运算符 对照表
TP运算符SQL运算符例子实际查询条件
eq=$map['id'] = array('eq',100);$map['id'] = 100;
neq!=$map['id'] = array('neq',100);id != 100
gt>$map['id'] = array('gt',100);id > 100
elt<=$map['id'] = array('elt',100);id <= 100
likelike$map['username'] = array('like','Admin%');username like 'Admin%'
betweenbetween and$map['id'] = array('between','1,8');id BETWEEN 1 AND 8
not innot in$map['id'] = array('not in','1,5,8');id not in(1,5,8)
and(默认)and$map['id'] = array(array('gt',1),array('lt',10));(id > 1) AND (id < 10)
oror$map['id'] = array(array('gt',3),array('lt',10), 'or');(id > 3) OR (id < 10)
xor(异或)xor两个输入中只有一个是true时,结果为true,否则为false,例子略。1 xor 1 = 0
exp综合表达式$map['id'] = array('exp','in(1,3,8)');$map['id'] = array('in','1,3,8');



ThinkPHP之where方法
https://github.13sai.com/2016/03/02/25/
作者
13sai
许可协议