您的位置 首页 php

thinkphp5.1的Db类使用注意事项(CURD)

先声明是TP官网的手册有说明使用方法,我是在学习的过程中写的笔记,分享出来希望能帮助到更多的人:

看手册的人不知道有没有注意到这句话:在进行依赖注入的时候,请不要使用Facade类作为类型约束,而是建议使用原来的动态类;这句话很重要,希望大家不要踩坑!

1.用Db类查询数据时一些注意项:

a.控制器导入Db类 use think\Db;

b.查询单条数据 Db::table(‘完整的数据表名’)->where(‘id’,1)->find() //如果没有数据返回null

c.findOrFail() //如果没有查找到数据,则会抛出一个think\db\exception\DataNotFoundException异常。

d.findOrEmpty() //当查询不存在的时候返回空数组而不是Null

e.Db::table(‘完整的数据表名’)->where(‘status’,1)->select() //select 方法查询结果是一个二维数组,如果结果不存在,返回空数组

f.selectOrFail() //如果没有查找到数据,同样也会抛出一个think\db\exception\DataNotFoundException异常。

g.如果设置了数据表前缀参数的话,可以使用:

Db::name(‘user’)->where(‘id’,1)->find();

Db::name(‘user’)->where(‘status’,1)->select();

//如果没有设置表前缀 name与table效果一样

h.db助手函数与name效果一样:

db(‘user’,’db_config1′)->where(‘id’,1)->find()

i.值和列的查询:

值 value(‘字段名’) //value 方法查询结果不存在,返回 null

列 column(‘字段名’,[‘作为索引’]) //column 方法查询结果不存在,返回空数组

提供图片可另存便于学习

2.用Db类增加数据时一些注意事项:

a.使用Db类的insert方法向数据提交数据

b.insert($data)返回添加成功的条数

c.Db::name(‘user’)->data($data)->insert() //如果数据没有数据里的字段会抛出异常

d.Db::name(‘user’)->strict(false)->insert($data) //不存在的字段的值将会直接抛弃,也不会抛出异常

e.返回新增数据的自增 主键 $userId = Db::name(‘user’)->insertGetId($data);

f.添加多条数据 Db::name(‘user’)->insertAll($data); //insertAll 方法添加数据成功返回添加成功的条数

g.分批插入,使用limit方法指定每次插入的数量限制 Db::name(‘user’)->data($data)->limit(100)->insertAll()

提供图片可另存便于学习

3.用Db类更新数据时一些注意事项:

a.Db::name(‘user’)->where(‘id’, 1)->update([‘name’ => ‘ thinkphp ‘]);

//update 方法返回影响数据的条数,没修改任何数据返回 0

实际生成的SQL语句可能是:UPDATE `think_user` SET `name`=’thinkphp’ WHERE `id` = 1

b.支持使用data方法传入要更新的数据

Db::name(‘user’)->where(‘id’, 1)->data([‘name’ => ‘thinkphp’])->update();

//如果update方法和data方法同时传入更新数据,则会进行合并。

c.如果数据中包含主键,可以直接使用:

Db::name(‘user’)->update([‘name’ => ‘thinkphp’,’id’=>1]);

d.如果要更新的数据需要使用SQL函数或者其它字段,可以使用下面的方式:

Db::name(‘user’)->where(‘id’,1)->inc(‘read_time’)->dec(‘score’,3)->exp(‘name’,’UPPER(name)’)->update();

//UPDATE `think_user` SET `read_time` = `read_time` + 1 , `score` = `score` – 3 , `name` = UPPER(name) WHERE

`id` = 1

//Db::name(‘user’)->where(‘id’, 1)->update([

‘name’ => Db::raw(‘UPPER(name)’),

‘score’ => Db::raw(‘score-3’),

‘read_time’ => Db::raw(‘read_time+1’)

]);//支持使用raw方法进行数据更新,适合在数组更新的情况。

e.更新字段值 Db::name(‘user’)->where(‘id’,1)->setField(‘name’, ‘thinkphp’);

//UPDATE `think_user` SET `name` = ‘thinkphp’ WHERE `id` = 1

//setField 方法返回影响数据的条数,没修改任何数据字段返回 0

f.使用setInc/setDec方法自增或自减一个字段的值( 如不加第二个参数,默认步长为1)。

Db::name(‘user’)->where(‘id’, 1)->setInc(‘score’, 1, 10);//延时10秒更新

//setInc/setDec 方法返回影响数据的条数,如果使用了延迟更新的话,可能会返回true

提供图片可另存便于学习

4.用Db类删除数据时的一些注意事项:

a.根据主键删除:

Db::table(‘think_user’)->delete(1);

Db::table(‘think_user’)->delete([1,2,3]);

b.条件删除:

Db::table(‘think_user’)->where(‘id’,1)->delete();

Db::table(‘think_user’)->where(‘id’,'<‘,10)->delete();

c.delete 方法返回影响数据的条数,没有删除返回 0

d.无条件删除所有数据:

Db::name(‘user’)->delete(true);

提供图片可另存便于学习

文章来源:智云一二三科技

文章标题:thinkphp5.1的Db类使用注意事项(CURD)

文章地址:https://www.zhihuclub.com/149555.shtml

关于作者: 智云科技

热门文章

网站地图