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()方法接受整数或整数组成的数组作为参数,可根据主键直接删除数据并返回受影响行数,否则返回0
  • where()->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条件语句字符串, 与标识符对应的键值对组成的数组)支持参数绑定,数据源支持的话支持预处理
posted @ 2021-06-18 11:04  试试手气  阅读(552)  评论(0编辑  收藏  举报