查询条件
优质
小牛编辑
133浏览
2023-12-01
v3.0开始,herosphp 提供了一套全新的设置查询条件的接口:
MysqlModel::where($field, $opt, $value);
参数名称 | 参数类型 | 参数说明 |
---|---|---|
$field | string OR function | 字段名称, 如果传入的是 function 的话,则说明是闭包. 闭包传入的是一组查询条件。 |
$opt | string | 操作符,如果不传入 $value 的情况下,$opt 的默认值为 "="。 其他可选值为 'IN', 'NIN', 'NOT', 'BETWEEN', 'LIKE','NULL','NNULL' |
$value | string OR array | 查询条件值 |
下面给出一些常用的查询 demo
普通的 AND 查询
//where name='aaaa' AND age > 20
$model->where("name", "aaaa")->where("age", ">", 20);
OR 查询
//where name='aaaa' OR age = 20
$model->where("name", "aaaa")->whereOr("age", 20);
模糊查询
//where name like '%aaaa%'
$model->where("name", "LIKE", "%aaaa%");
$model->where
NULL | NNULL 查询
//where name is null
$model->where("name", "NULL");
//where name is not null
$model->where("name", "NNULL");
IN | NIN 查询
//where id in(1,2,3)
$model->where("id", "IN", [1,2,3]);
//where id not in(1,2,3)
$model->where("id", "NIN", [1,2,3]);
BETWEEN 查询
//where age between 20 and 30
$model->where("id", "BETWEEN", [20,30]);
分组查询
//select id, count(mobile) as num from shop group by mobile having num > 10
$model->fields("id, count(mobile) as num")->group("mobile")->having("num", ">", 10);
闭包查询
闭包查询通常用来解决复杂的组合条件查询,比如先 AND 在 OR 或者 NOT 等各种逻辑组合,还杂糅了优先级(括号)。 例如要实现下面的查询:
select id,username,password from user where id > 10 and (name like '%aaa%' OR sex = 'M') AND (ischeck=0 AND addtime > '2017-06-20 13:30:30');
这种复杂的查询条件显然是不能用简单的查询接口去实现的,这个时候我们就要使用闭包查询了。
$model->where("id", ">", 10)
->where(function($model) use($model) {
$model->where("name", "LIKE", "%aaa%")->whereOr("sex", "M");
})
->where(function($model) use($model) {
$model->where("ischeck", 0)->where("addtime", ">", "2017-06-20 13:30:30");
})
连接查询
$model->alias('a')
->fields('a.id, a.username, a.password, b.create_by, create_date, b.number')
->join('content b', MYSQL_JOIN_RIGHT)
->on('a.id = b.id')
->find();
- MYSQL_JOIN_LEFT 左连接(默认)
- MYSQL_JOIN_RIGHT 右连接
- MYSQL_JOIN_INNER 内连接