跳到主要内容

引入数据库: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();