本学习课程以学习为目的一周三篇持续更新,学习代码更新在码云公开仓库,不足之处欢迎朋友们前来指导,写作不易请多多支持,本人创作新手写的不好,不喜勿喷,谢谢大家。
学习目标
- 数据新增
- 批量数据新增
- save()新增
- 数据修改
- 数据删除
- 比较查询
- 模糊查询
- exp查询
一.数据新增
码云提交编号:e7ccc4dfb80d1664238a323cff7023bd04a5e808
- 使用 insert()方法可以向数据表添加一条数据
- 如果新增成功,insert()方法会返回一个 1 值,即受影响行数
public function insert(){ $data = [ 'username' => '反贼唐三8888', 'password' => 'e10adc3949ba59abbe56e057f20f883e', 'gender' => '1', 'email' => '123@qq.com', 'remarks' => '老铁66', 'status' => 0, 'delete_time'=> null, 'create_time'=> '2022-03-23 20:09:27', 'update_time'=> '2022-03-23 20:09:27' ]; return Db::name('user')->insert($data); }
-
如果你添加一个不存在的字段数据,会抛出一个异常 Exception
'create_time2'=> '2022-03-23 20:09:27',
-
如果想强行新增抛弃不存在的字段数据,则使用 strict(false) 方法,忽略异常
return Db::name('user')->strict(false)->insert($data);
-
如果我们采用的数据库是 mysql ,可以支持 replace 写入, insert 和 replace 写入的区别在于,前者表示表中存在主键相同则报错,后者则修改,我们对比一下他们sql语句的区别
// Db::name('user')->insert($data); Db::name('user')->replace()->insert($data); return Db::getLastSql();
我们对比一下他们sql语句的区别
INSERT INTO `tp_user` SET `username` = '反贼唐三8888' , `password` = 'e10adc3949ba59abbe56e057f20f883e' , `gender` = '1' , `email` = '123@qq.com' , `remarks` = '老铁66' , `status` = 0 , `delete_time` = NULL , `create_time` = '2022-03-23 20:09:27' , `update_time` = '2022-03-23 20:09:27' REPLACE INTO `tp_user` SET `username` = '反贼唐三8888' , `password` = 'e10adc3949ba59abbe56e057f20f883e' , `gender` = '1' , `email` = '123@qq.com' , `remarks` = '老铁66' , `status` = 0 , `delete_time` = NULL , `create_time` = '2022-03-23 20:09:27' , `update_time` = '2022-03-23 20:09:27'
- 使用 insertGetId()方法,可以在新增成功后返回当前数据 ID
return Db::name('user')->insertGetId($data);
二. 批量数据新增
- 使用 insertAll()方法,可以批量新增数据,但要保持数组结构一致
$data2 =[[ 'username' => '苍老师', 'password' => 'e10adc3949ba59abbe56e057f20f883e', 'gender' => '1', 'email' => '123@qq.com', 'remarks' => '老铁66', 'status' => 0, 'delete_time'=> null, 'create_time'=> '2022-03-23 20:09:27', // 'create_time2'=> '2022-03-23 20:09:27',//一个不存在的字段 'update_time'=> '2022-03-23 20:09:27' ],[ 'username' => '李老师', 'password' => 'e10adc3949ba59abbe56e057f20f883e', 'gender' => '1', 'email' => '123@qq.com', 'remarks' => '老铁66', 'status' => 0, 'delete_time'=> null, 'create_time'=> '2022-03-23 20:09:27', // 'create_time2'=> '2022-03-23 20:09:27',//一个不存在的字段 'update_time'=> '2022-03-23 20:09:27' ],[ 'username' => '波老师', 'password' => 'e10adc3949ba59abbe56e057f20f883e', 'gender' => '1', 'email' => '123@qq.com', 'remarks' => '老铁66', 'status' => 0, 'delete_time'=> null, 'create_time'=> '2022-03-23 20:09:27', // 'create_time2'=> '2022-03-23 20:09:27',//一个不存在的字段 'update_time'=> '2022-03-23 20:09:27' ]] ; Db::name('user')->insertAll($data2);
- 批量新增也支持 replace()方法,添加后改变成 replace into
Db::name('user')->replace()->insertAll($data2);
三. save增数据
- save()方法是一个通用方法,可以自行判断是新增还是修改(更新)数据,方法判断是否为新增或修改的依据为,是否存在主键,不存在即新增
Db::name('user')->save($data)
四.数据修改
码云提交编号:00393b2b6d8404c3b3a324dfb9649c56ab7400a1
- 使用 update()方法来修改数据,修改成功返回影响行数,没有修改返回 0
$data = [ 'username' => '小王子' ]; return Db::name('user')->where('id', 17)->update($data);
- 如果修改数据包含了主键信息,比如 id,那么可以省略掉 where 条件
$data = [ 'id' =>18, 'username' => '小王子' ]; return Db::name('user')->update($data);
- 如果想让一些字段修改时执行 SQL 函数操作,可以使用 exp()方法实现
$data = [ 'id' =>19, 'remarks' => 'Tony' ]; return Db::name('user')->exp('username', 'UPPER(username)')->update($data);
-
如果要自增 / 自减某个字段,可以使用 inc/dec 方法,并支持自定义步长
Db::name('user') ->where('id', 19) ->inc('gender') ->dec('status', 2) ->update();
-
一个更加简单粗暴灵活的方式,使用 ::raw() 方法实现 3 , 4 点的内容
Db::name('user')->where('id', 17)->update( [ 'username' => Db::raw('UPPER(username)'), 'gender' => Db::raw('gender + 1'), 'status' => Db::raw('status - 2')] );
- 使用 save()方法进行修改数据,这里必须指定主键才能实现修改功能
Db::name('user')->where('id', 20) ->save(['username'=>'猴面包树']);
五.数据删除
- 极简删除可以根据主键直接删除,删除成功返回影响行数,否则 0
return Db::name('user')->delete(49);
- 根据主键,还可以删除多条记录
return Db::name('user')->delete([48,47,46]);
- 正常情况下,通过 where()方法来删除
return Db::name('user')->where('id', 45)->delete();
- 通过 true 参数删除数据表所有数据,我已经试过了,现在就不试了
return Db::name('user')->delete(true);
六.比较查询
码云提交编号:f4eeaa524bd75c359eba5f787112736d452a334e
-
查询表达式支持大部分常用的 SQL 语句,语法格式如下:
-
在查询数据进行筛选时,我们采用 where() 方法,比如 id=250
$data= Db::name('user')->where('id', 20)->find(); return json($data);
$data= Db::name('user')->where('id','=', 20)->find(); return json($data);
-
使用 <> 、 > 、 < 、 >= 、 <= 可以筛选出各种符合比较值的数据列表
$data= Db::name('user')->where('id','<>', 20)->select(); return json($data);
$data= Db::name('user')->where('id','>', 20)->select(); return json($data);
$data= Db::name('user')->where('id','<', 20)->select(); return json($data);
$data= Db::name('user')->where('id','>=', 20)->select(); return json($data);
$data= Db::name('user')->where('id','<=', 20)->select(); return json($data);
七.模糊查询
- 使用 like 表达式进行模糊查询
$data = Db::name('user')->where('username','like','t%')->select(); return json($data);
- like 表达式还可以支持数组传递进行模糊查询
$data = Db::name('user')->where('username','like',['李%','张%','赵%']')->select(); return json($data);
$data = Db::name('user')->where('username','like',['李%','张%','赵%'],'or')->select(); return json($data);
SELECT * FROM `tp_user` WHERE (`username` LIKE '李%' AND `username` LIKE '张%' AND `username` LIKE '赵%') SELECT * FROM `tp_user` WHERE (`username` LIKE '李%' OR `username` LIKE '张%' OR `username` LIKE '赵%')
- like 表达式具有两个快捷方式 whereLike()取正和 whereNoLike()取反
$data = Db::name('user')->whereLike('username','李%')->select(); return json($data);
$data = Db::name('user')->whereNotLike('username','李%')->select(); return json($data);
- like 表达式的两个快捷方式 whereLike()和 whereNoLike()也可以支持数组传递进行模糊查询
-
between 表达式具也有两个快捷方式 whereBetween() 和 whereNotBetween() ;
$data = Db::name('user')->whereBetween('id','10,15')->select(); return json($data);
-
in 表达式具有两个快捷方式 whereIn() 和 whereNotIn()
$data = Db::name('user')->whereIn('id','10,12,14')->select(); return json($data);
-
null 表达式具有两个快捷方式 whereNull() 和 whereNotNull() ;
八.exp查询
- 使用 exp 可以自定义字段后的 SQL 语句
- 如果上面那些表达式都无法满足你的查询要求你就可以使用exp自定义拼装查询