深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 75|回复: 5
打印 上一主题 下一主题

fastadmin的db::用法

[复制链接]

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
跳转到指定楼层
楼主
发表于 2025-3-24 22:42:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 FastAdmin 中,Db 是 ThinkPHP 提供的数据库操作类,常用于数据库查询、插入、更新、删除等操作。以下是一些 Db:: 类的常用方法,帮助你高效地进行数据库操作。

1. 查询方法
Db::table(): 选择数据库表
  1. $result = Db::table('your_table')->select(); // 获取所有数据
复制代码
Db::name(): 快速指定表名,通常用于模型无关的操作
  1. $result = Db::name('your_table')->where('id', 1)->find(); // 查询单条数据
复制代码
Db::select(): 获取多条数据
  1. $result = Db::name('your_table')->where('status', 1)->select(); // 查询状态为1的所有数据
复制代码
Db::find(): 获取单条数据
  1. $result = Db::name('your_table')->where('id', 1)->find(); // 查询ID为1的单条数据
复制代码
Db::column(): 获取某一列数据
  1. $result = Db::name('your_table')->column('name'); // 获取所有'name'字段的值
复制代码
Db::count(): 获取记录数量
  1. $count = Db::name('your_table')->where('status', 1)->count(); // 获取状态为1的记录数量
复制代码
Db::max(): 获取某列的最大值
  1. $maxValue = Db::name('your_table')->max('price'); // 获取price列的最大值
复制代码
Db::min(): 获取某列的最小值
  1. $minValue = Db::name('your_table')->min('price'); // 获取price列的最小值
复制代码
Db::avg(): 获取某列的平均值
  1. $avgValue = Db::name('your_table')->avg('price'); // 获取price列的平均值
复制代码
Db::sum(): 获取某列的总和
  1. $sumValue = Db::name('your_table')->sum('price'); // 获取price列的总和
复制代码
回复

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
沙发
 楼主| 发表于 2025-3-24 22:45:01 | 只看该作者
2. 插入与更新方法

Db::insert(): 插入一条数据
  1. Db::name('your_table')->insert(['name' => 'John', 'age' => 30]); // 插入一条数据
复制代码
Db::insertAll(): 批量插入数据
  1. $data = [
  2.     ['name' => 'John', 'age' => 30],
  3.     ['name' => 'Jane', 'age' => 25]
  4. ];
  5. Db::name('your_table')->insertAll($data); // 批量插入数据
复制代码
Db::update(): 更新数据
  1. Db::name('your_table')->where('id', 1)->update(['name' => 'John Doe']); // 更新ID为1的记录
复制代码
Db::setField(): 更新单个字段
  1. Db::name('your_table')->where('id', 1)->setField('status', 1); // 更新ID为1的记录的status字段
复制代码
Db::inc(): 增加某字段的值
  1. Db::name('your_table')->where('id', 1)->setInc('age', 1); // 将ID为1的记录的age字段值增加1
复制代码
Db::dec(): 减少某字段的值
  1. Db::name('your_table')->where('id', 1)->setDec('age', 1); // 将ID为1的记录的age字段值减少1
复制代码
回复 支持 反对

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
板凳
 楼主| 发表于 2025-3-24 22:48:37 | 只看该作者
3. 删除方法
Db::delete(): 删除数据
  1. Db::name('your_table')->where('id', 1)->delete(); // 删除ID为1的记录
复制代码
Db::truncate(): 清空表中的所有数据
  1. Db::name('your_table')->truncate(); // 清空整个表的数据
复制代码

4. 事务管理
Db::startTrans(): 开始事务
  1. Db::startTrans();
复制代码
Db::commit(): 提交事务
  1. Db::commit();
复制代码
Db::rollback(): 回滚事务
  1. Db::rollback();
复制代码

5. 链式查询方法
FastAdmin 和 ThinkPHP 支持链式操作,可以链式调用多个查询方法:

where(): 添加查询条件
  1. Db::name('your_table')->where('status', 1)->where('age', '>', 18)->select(); // 多个查询条件
复制代码
order(): 排序
  1. Db::name('your_table')->order('created_at', 'desc')->select(); // 按照创建时间降序排列
复制代码
limit(): 设置查询返回的数据条数
  1. Db::name('your_table')->limit(10)->select(); // 获取前10条记录
复制代码
group(): 分组
  1. Db::name('your_table')->group('status')->select(); // 按照status字段分组
复制代码
having(): 设置 having 查询条件
  1. Db::name('your_table')->having('sum(price) > 1000')->select(); // 按照聚合函数过滤
复制代码
join(): 连接查询
  1. Db::name('your_table')
  2.     ->alias('a')
  3.     ->join('another_table b', 'a.id = b.id')
  4.     ->where('a.status', 1)
  5.     ->select();
复制代码

6. 获取原生 SQL 查询
有时你可能想查看执行的 SQL 语句,可以通过 getLastSql() 方法获取:
  1. $sql = Db::name('your_table')->where('status', 1)->select()->getLastSql();
  2. echo $sql; // 打印 SQL 查询
复制代码
总结
Db:: 类提供了丰富的数据库操作方法,包括查询、插入、更新、删除、事务管理等功能。你可以使用链式操作将多个方法组合在一起,进行更加灵活的查询和数据操作。

常用的方法包括:
  • 查询类: select(), find(), column(), count(), max(), min(), avg(), sum()
  • 数据操作类: insert(), insertAll(), update(), setField(), setInc(), setDec()
  • 删除类: delete(), truncate()
  • 事务类: startTrans(), commit(), rollback()
  • 链式操作: where(), order(), limit(), group(), having(), join()
这些方法帮助你在 FastAdmin 中高效地与数据库交互,简化开发过程。
回复 支持 反对

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
地板
 楼主| 发表于 2025-3-24 23:10:22 | 只看该作者
Db::execute("SELECT 1");
回复 支持 反对

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
5#
 楼主| 发表于 2025-3-24 23:11:13 | 只看该作者
try {
                    $result = Db::query("SHOW CREATE TABLE `" . $prefix . $name . "`;");
                    if (isset($result[0]) && isset($result[0]['Create Table'])) {
                        $createTableSql = $result[0]['Create Table'];
                    }
                } catch (PDOException $e) {
                }
回复 支持 反对

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
6#
 楼主| 发表于 2025-3-24 23:13:49 | 只看该作者
直接使用 Db::table 方法:与 Db::name 不同,Db::table 方法要求传入完整的表名(包括前缀),因此不会自动添加前缀。例如:
  1. Db::table('r_wo_ext')->where(['id'=>1])->select();
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-4 20:59 , Processed in 0.035664 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表