引入数据库:use rp\Db;
基础方法
- name(table):数据表,无需带前缀
- table(table):数据表,需带前缀,完整的数据表名称
- field(fieldStr):查询字段,字符串或一维数组,默认*
- alias(str):数据表别名,配合join使用
- join(table, condition, type):联表查询
- type有:left,right,inner,full, 默认 left;
- 可传二维数组多表关联,如
[[关联表, 关联条件, 关联类型], [关联表, 关联条件, 关联类型]]
- where(string|array):查询条件,可字符串或二维数组,详细语法查看下方“where语法”
- limit(limitStr):查询数量,如:
limit('0,10')
- order(field, type):排序方式
- 如:
order('id','desc')
或order(['id'=>'desc','time'=>'desc'])
; - 使用SQL函数:
order('rand()')
- 如:
- group(field):分组统计,如:
group('type')
- find():查询单条数据
- select($type) :查询多条数据
- type支持assoc,array,object,num,row,all,yield(V2.5.8),默认assoc
- count(field):统计数量,默认 *
- sum(field):获取总和
- insert(array):插入数据,一维数组时为单条,二维数组时为多条
- update(array):修改数据,如:
update(['name'=>'name1'])
- setInc(field, number):指定字段自增,默认 +1
- setDec(field, number):指定字段自减,默认 -1
- dele():删除数据
其他方法
- getSql():获取生成的SQL语句(V2.5.8),
- slave():自定义数据库链接标识(V2.5.8)
- insert_id():获取新增数据的主键值
- affected_rows():获取操作影响的行数
- server_info():获取数据库的信息
- server_version():获取数据库版本
- query(sql):原生Mysql语句查询,方式:
Db::instance()->query(sql语句);
快速使用
提示
必须Db::name()或Db::table()开始
$res=Db::name('tableName')->where(['id'=>1])->find();
where语法
可用表达式:=、 <>、 !=、 >、 >=、 <、 <=、 like、 not like、 in、 not in、 between、 not between、 exists、 not exists、 exp、 find_in_set
表达式参数请用字符串,比如array('id'=>array('in','1,2'))
或array('id'=>array('in',join(',',[1,2]))
字符串形式
Db::name('tableName')->where('id=1')->find();
常规用法
Db::name('tableName')->where(array('id'=>1,'status'=>1))->find();
//生成SQL:select * from tableName where id = 1 and status = 1
表达式用法
Db::name('tableName')->where(array('id'=>1,'status'=>array('>',1)))->find();
//生成SQL:select * from tableName where id = 1 and status > 1
NULL用法
Db::name('tableName')->where(array('name'=>'null'))->find();
//生成SQL:select * from tableName where name is null
Db::name('tableName')->where(array('name'=>'not null'))->find();
//生成SQL:select * from tableName where name is not null
in用法
//字符串形式
Db::name('tableName')->where(array('name'=>['in', '1,2,3']))->find();
//生成SQL:select * from tableName where name in(1,2,3)
//数组形式
Db::name('tableName')->where(array('name'=>['in', [1,2,3]]))->find();
//生成SQL:select * from tableName where name in(1,2,3)
//sql形式
$sql=Db::name('tableName2')->getSql()->select();
Db::name('tableName')->where(array('name'=>['in', 'sql:'.$sql]))->find();
//生成SQL:select * from tableName where name in(select * from tableName2)
join用法
//默认用法
Db::name('tableName1')->alias('a')->join('tableName2 b','a.id=b.id','left')->find();
//生成SQL:select * from tableName1 as a left join tableName2 b on a.id=b.id
//子查询
$sql=Db::name('tableName2')->getSql()->select();
Db::name('tableName1')->alias('a')->join('('.$sql.') as b','a.id=b.id','left')->find();
//生成SQL:select * from tableName1 as a left join (select * from tableName2) as b on a.id=b.id
json用法
v2.5.5新增
Db::name('tableName')->where(array('data->"$.title"'=>'test'))->find();
//生成SQL:select * from tableName where data->"$.title" = 'test'
多字段同条件
//同条件OR
Db::name('tableName')->where(array('name|nick'=>'test'))->find();
//生成SQL:select * from tableName where (name = 'test' or nick = 'test')
//同条件AND
Db::name('tableName')->where(array('name&nick'=>'test'))->find();
//生成SQL:select * from tableName where (name = 'test' and nick = 'test')
//同条件表达式
Db::name('tableName')->where(array('name|nick'=>array('like','%t%')))->find();
//生成SQL:select * from tableName where (name like '%t%' or nick like '%t%')
多字段不同条件
//不同条件OR
Db::name('tableName')->where(array('name|nick'=>array('test','user')))->find();
//生成SQL:select * from tableName where (name = 'test' or nick = 'user')
//不同条件AND:
Db::name('tableName')->where(array('name&nick'=>array('test','user')))->find();
//生成SQL:select * from tableName where (name = 'test' and nick = 'user')
//不同条件表达式:
Db::name('tableName')->where(array('name|nick'=>array(array('<>','test'),array('like','%user%'))))->find();
//生成SQL:select * from tableName where (name <> 'test' or nick like '%user%')
复杂逻辑
Db::name('tableName')->where(array('status&(name|nick)'=>array(1,array('<>','test'),array('like','%user%'))))->find();
//生成SQL:select * from tableName where (status = 1 and (name <> 'test' or nick like '%user%'))
多条件like
Db::name('tableName')->where(array('(name|name)|(nick|nick2)'=>[['like','%user%'],['like','%member%'],['like','%user%'],['like','%member%']]))->find();
//生成SQL:select * from tableName where ((name like '%user%' or name like '%member%') or (nick like '%user%' or nick2 like '%member%'))
混合使用
Db::name('tableName')->where(array('phone'=>'not null','money'=>array('>',100),'status&(name|nick)'=>array(1,array('<>','test'),array('like','%user%'))))->find();
//生成SQL:select * from tableName where phone is not null and money > 100 and (status = 1 and (name <> 'test' or nick like '%user%'))
提示
key为多字段时,如果value是字符串,则表示使用相同条件。
如果是一维数组,则第一个字段对应value的第一个元素,以此轮推。
同样value若是二维数组,第几个字段就对应value的第几个元素。
事务
V1.9版本新增
Db::transaction();
try{
/*
*业务逻辑sql;
*/
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
}
跨库查询
V3.5.5版本新增
提示
多个数据库在setting/config目录中配置,一个库一个文件,格式参考default.php中的db参数。
//默认数据库
Db::name('tableName')->select();
//指定数据库
Db::connect('databaseName')->name('tableName')->select();