ThinkPhp数据库操作方法列表

一、单数据查询

1. Db::table()中 table 必须指定完整数据表(包括前缀);

2. 如果希望只查询一条数据,可以使用 find()方法,需指定 where 条件;

Db::table('tp_user')->where('id', 27)->find()

3. 使用 findOrEmpty()方法也可以查询一条数据,但在没有数据时返回一个空数组;

 Db::table('tp_user')->where('id', 1)->findOrEmpty()

4. 想要获取多列数据,可以使用 select()方法;

Db::table('tp_user')->select();

SELECT * FROM `tp_user`

5. 多列数据在查询不到任何数据时返回空数组,使用 selectOrFail()抛出异常; Db::table('tp_user')->where('id', 1)->selectOrFail();

6. 在 select()方法后再使用 toArray()方法,可以将数据集对象转化为数组;

$user = Db::table('tp_user')->select()->toArray(); 

二、数据新增

1. 使用 insert()方法可以向数据表添加一条数据

Db::table('user')->insert($data);

2.使用 insertAll()方法,可以批量新增数据,但要保持数组结构一致;

Db::name('user')->insertAll($data);

3.save()方法是一个通用方法,可以自行判断是新增还是修改(更新)数据

Db::name('user')->save($data);

三、数据修改

1.使用 update()方法来修改数据,修改成功返回影响行数,没有修改返回 0;

Db::name('user')->where('id', 38)->update($data);

2.如果修改数据包含了主键信息,比如 id,那么可以省略掉 where

3.使用 save()方法进行修改数据,这里必须指定主键才能实现修改功能

Db::name('user')->where('id', 232) ->save(['username'=>'李黑']);

四、数据删除

1. 极简删除可以根据主键直接删除,删除成功返回影响行数,否则 0;

Db::name('user')->delete(51);

2.根据主键,还可以删除多条记录;

Db::name('user')->delete([48,49,50]);

3.正常情况下,通过 where()方法来删除;

Db::name('user')->where('id', 47)->delete();

4.通过 true 参数删除数据表所有数据,大家自行测试下;

Db::name('user')->delete(true)

五、查询表达式

1.. 查询表达式支持大部分常用的 SQL 语句,语法格式如下:

where('字段名','查询表达式','查询条件')

2.like 表达式具有两个快捷方式 whereLike()和 whereNoLike();

Db::name('user')->whereLike('email','xiao%')->select();

Db::name('user')->whereNotLike('email','xiao%')->select()

3.in 表达式具有两个快捷方式 whereIn()和 whereNotIn();

Db::name('user')->whereIn('id','19,21,29')->select();

Db::name('user')->whereNotIn('id','19,21,29')->select()

4.null 表达式具有两个快捷方式 whereNull()和 whereNotNull();

Db::name('user')->whereNull('uid')->select();

Db::name('user')->whereNotNull('uid')->select()

六、聚合查询

1. 使用 count()方法,可以求出所查询数据的数量;

Db::name('user')->count();

2. count()可设置指定 id,比如有空值(Null)的 uid,不会计算数量;

Db::name('user')->count('uid');

3. 使用 max()方法,求出所查询数据字段的最大值;

Db::name('user')->max('price');

4. 如果 max()方法,求出的值不是数值,则通过第二参数强制转换;

Db::name('user')->max('price', false);

5. 使用 min()方法,求出所查询数据字段的最小值,也可以强制转换;

Db::name('user')->min('price');

6. 使用 avg()方法,求出所查询数据字段的平均值;

Db::name('user')->avg('price');

7. 使用 sum()方法,求出所查询数据字段的总和;

Db::name('user')->sum('price');

七、原生查询

1. 使用 query()方法,进行原生 SQL 查询,适用于读取操作,SQL 错误返回 false; Db::query('select * from tp_user');

2. 使用 execute 方法,进行原生 SQL 更新写入等,SQL 错误返回 false;

Db::execute('update tp_user set username="孙悟空" where id=29

八、链式查询

1.将复杂的数组组装后,通过变量传递,将增加可读性;

$map[] = ['gender', '=', '男'];

$map[] = ['price', 'in', [60, 70, 80]];

$user = Db::name('user')->where($map)->select()

2.字符串形式传递,简单粗暴的查询方式,whereRaw()支持复杂字符串格式;

Db::name('user')->whereRaw('gender="男" AND price IN (60, 70, 80)')->select();

3.. 使用 withoutField()方法中字段排除,可以屏蔽掉想要不显示的字段;

Db::name('user')->withoutField('details')->select()

4.使用 field()方法在新增时,验证字段的合法性;

Db::name('user')->field('username, email, details')->insert($data)

5. 使用 limit()方法,限制获取输出数据的个数;

Db::name('user')->limit(5)->select();

6. 分页模式,即传递两个参数,比如从第 3 条开始显示 5 条 limit(2,5);

Db::name('user')->limit(2, 5)->select();

7. 实现分页,需要严格计算每页显示的条数,然后从第几条开始;

第一页 Db::name('user')->limit(0, 5)->select()

8.page()分页方法,优化了 limit()方法,无须计算分页条数;

//第一页 Db::name('user')->page(1, 5)->select();

//第二页 Db::name('user')->page(2, 5)->select();

9. 使用 order()方法,可以指定排序方式,没有指定第二参数,默认 asc;

Db::name('user')->order('id', 'desc')->select();

10. 支持数组的方式,对多个字段进行排序;

Db::name('user')->order(['create_time'=>'desc', 'price'=>'asc'])->select();

11. 使用 orderRaw()方法,支持排序的时候指定 MySQL 函数;

Db::name('user')->orderRaw('FIELD(username,"樱桃小丸子") DESC')->select();

12.使用 group()方法,给性别不同的人进行 price 字段的总和统计

Db::name('user')->fieldRaw('gender, SUM(price)') ->group('gender')->select()

13.使用 group()分组之后,再使用 having()进行筛选

$result = Db::name('user') ->fieldRaw('gender, SUM(price)') ->group('gender') ->having('SUM(price)>600') ->select();

九、事务处理

Db::transaction(function () {

Db::name('user')->where('id', 19)->save(['price'=>Db::raw('price - 3')]);

Db::name('user1')->where('id', 20)->save(['price'=>Db::raw('price + 3')]);

}); 

  • 36
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值