ThinkPHP6 - 数据笔记
数据库连接
.env
文件以键值对方式保存本地数据连接配置,config\database.php
会优先读取.env
中的值,否则启用env
方法中的默认值,因此在部署(前)时应保证database.php
中有关数据库配置部分的默认值有效,以便保证在生产环境中无论是否存在.env
文件都能正常工作。database.php
中的connections
可以配置多个连接源,并通过default
键指定默认使用的连接,或者在代码中通过connect
方法指定所用的连接名
Db::connect('mysql_backup_2')->table('tbName')->select();
有条件操作数据库
Db::table()
将查询到所有数据,但需要给定完整的数据表名,包括前缀find()
可以查询一条数据,但需要给定where(colName, value)
条件findOrFail()
没有数据时抛出一个异常,findOrEmpty()
没有数据时返回空数组select()
返回数据集,select()->toArray()
转换为数组Db::name(tableName)
方法可帮助忽略配置文件中设置的表名前缀chunk()
批量返回,cursor()
获取游标,一行行处理,减小一次性内存压力
新增数据
insert()
接受一个数组参数用于新增insertAll()
接受一个数组类型的数组参数用于新增save()
方法可以通过内置逻辑智能判断要新增还是更新数据,判断依据是是否含有主键列,不包含主键是新增,反之更新field()
帮助在新增时验证字段合法性Db::name()->field('colName1, colName2')->insert($data);
更新数据
update()
用于更新save()
方法参数中包含主键即可更新exp()
用于执行SQL函数,如where()->exp('name', 'UPPER(name)')->update()
inc/dec()
自增自减指定列Db::raw()
方法更加灵活实现exp()和inc/dec(),如where()->update([ 'name'=>Db::raw('UPPER(name), 'price'=>Db::raw('price+1'), 'status'=>Db::raw('status-2'))) ])
删除数据
delete()
方法接受整数或整数组成的数组作为参数,可根据主键直接删除数据并返回受影响行数,否则返回0where()->delete()
使用where约束条件来删除delete(true)
删除所有数据,勿动!!!
分页
limit($num)
和limit($indexPos,$num)
方法用于有限地检索数据page($pageNum, $num)
方法优化了limit()
,无需计算分页条数
高级查询
- 给
where()
传递一个数组类型的数组可以完成多条件的WHERE的组合,把这个数组放在where()
中并加入一个中括号可使其独立的包含在带 () 的SQL语句中
$exp = [
['id', '>', '0'],
['price', 'exp', Db::raw('>=80')],
['email', 'like', '%163%']
];
$user = Db::name('user')->where([$exp])->where('status', 1)->select();
return Db::getLastSql();
WhereOr([$exp1, $exp2])
适用于含相同字段且逻辑是或的查询Where()
支持闭包,闭包语法一定程度上更直观
$user = Db::name('user')->where(function ($query){
$query->where('id', '>', 0);
})->whereOr(function ($query){
$query->where('username', 'like', '%小%');
})->select();
WhereRaw()
支持自定义的符合SQL语法的条件字符串,即SQL中关键字WHERE后边的部分WhereRaw(带有标识符的Where条件语句字符串, 与标识符对应的键值对组成的数组)
支持参数绑定,数据源支持的话支持预处理