一、单数据查询
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')]);
});