ThinkPHP6 数据库增删改查操作整理
创始人
2024-05-09 09:30:24

环境配置:

PHP 7.3.4  + mysql 5.6 + ThinkPHP 6.1

目录

环境配置:

1.连接数据表

2.查看执行sql

3.查询单条数据

4.查询数据集

5.设置返回字段 field

6.排序order

7.列查询

8.值查询

9.新增单条数据

10.新增批量数据

11.更新数据

12.Raw更新

13.自增/自减

15.删除数据

16.删除全部数据


1.连接数据表

name方式

用处:简化数据表前缀的传入,例如:

Db::name('inquiry');

会自动获取当前模型对应的数据表前缀来生成 inquiry 数据表名称。

注意:本文章的数据表没有前缀,有前缀的就会自动获取 前缀_inquiry数据表

table方式

用法:

切换操作的数据表;

table方法指定的数据表需要完整的表名

Db::table('inquiry');

指定数据库:

Db::table('db_name.inquiry');

对多表进行操作;

Db::table('inquiry i,inquiry_company c')->field('i.id,c.iq_id')->limit(10)->select();

注意:多表查询,并非联合查询

Sql:

SELECT `i`.`id`,`c`.`iq_id` FROM `inquiry` `i`,`inquiry_company` `c` LIMIT 10

2.查看执行sql

echo Db::table('inquiry')->fetchSql(true)->find(1);

3.查询单条数据

Db::name('inquiry')->where('brand', 10)->where('category', 42)->find()

Sql:

SELECT * FROM `inquiry` WHERE  `brand` = 10  AND `category` = 42 LIMIT 1

返回结果:

Array
([id] => 1[uid] => 11[company_id] => 5[content] => 690164-B21  P220I raid卡 数量1[fileurl] =>[brand] => 10[category] => 42[num] => 1[signup_num] => 0[arrival_time] => 1614096000[addtime] => 1614145474[invoice_type] =>[appoint_company] =>[is_expire] => 1
)

4.查询数据集

Db::name('inquiry')->where('brand', 10)->where('category', 42)->select()->toArray();

需要toArray()方法把返回数据对象转化为数组。

Sql:

SELECT * FROM `inquiry` WHERE  `brand` = 10  AND `category` = 42

返回结果:

Array
([0] => Array([id] => 1[uid] => 11[company_id] => 5[content] => 690164-B21  P220I raid卡 数量1[fileurl] =>[brand] => 10[category] => 42[num] => 1[signup_num] => 0[arrival_time] => 1614096000[addtime] => 1614145474[invoice_type] =>[appoint_company] =>[is_expire] => 1)[1] => Array([id] => 149[uid] => 10[company_id] => 4[content] => 615732-B21   HP Ethernet 1Gb 2-port 332T 网卡[fileurl] =>[brand] => 10[category] => 42[num] => 5[signup_num] => 0[arrival_time] => 1616515200[addtime] => 1616562900[invoice_type] =>[appoint_company] =>[is_expire] => 1)
)

5.设置返回字段 field

一般我们在项目中查询时,不会直接获取所有字段,都是按需获取指定部分字段,这也是一种数据查询优化方式。而TP中获取部分字段,并不是直接在find([‘id’, ‘brand’, ‘category’]) 或者 select([‘id’, ‘brand’, ‘category’]) 这样做了,只会得到NULL 或者 array(),需要一个新的方法:

Db::name('inquiry')->field(['id', 'brand', 'category'])->find();
Db::name('inquiry')->field(['id', 'brand', 'category'])->select()->toArray();

6.排序order

Db::name('inquiry')
->field(['id', 'brand', 'category'])
->order('id','desc')->find();Db::name('inquiry')
->field(['id','brand','category'])
->order('id','desc')
->select()->toArray();

7.列查询

查询某一列的值可以用.

Db::name('app_service')->where('id', '>', 1)->column('name');

 返回结果:

Array
([0] => 新增数据[1] => 新增数据[2] => 新增数据[3] => 新增数据[4] => 新增数据[5] => 新增数据[6] => 新增数据[7] => 新增数据[8] => 新增数据
)

Id作key

Db::name('app_service')->where('id', '>', 1)->column('name', 'id');

 返回结果:

Array
([2] => 新增数据[3] => 新增数据[4] => 新增数据[5] => 新增数据[6] => 新增数据[7] => 新增数据[8] => 新增数据[9] => 新增数据[10] => 新增数据
)

8.值查询

查询某个字段的值可以用。

Db::name('app_service')->where('id', 1)->value('name');

返回结果:

新增数据

9.新增单条数据

save

自动判断是新增还是更新数据(以写入数据中是否存在主键数据为依据)。

Db::name('app_service')->save(['name' => '新增数据','state' => 1,'reason' => '测试新增数据','addtime' =>time(),
]);

insert

Db::name('app_service')->insert(['name' => '新增数据','state' => 1,'reason' => '测试新增数据','addtime' =>time(),
]);

Sql:

INSERT INTO `app_service` SET `name` = '新增数据' , `state` = 1 , `reason` = '测试新增数据' , `addtime` = 1673242525

返回结果:

成功:返回添加成功的条数;失败:抛出异常

insertGetId

Db::name('app_service')->insertGetId(['name' => '新增数据','state' => 1,'reason' => '测试新增数据','addtime' =>time(),
]);

Sql:同save、insert

返回结果:

返回新增数据的自增主键

10.新增批量数据

确保字段一致

$data = [['name' => '新增数据-批量1','state' => 1,'reason' => '测试新增数据','addtime' =>time(),],['name' => '新增数据-批量2','state' => 1,'reason' => '测试新增数据','addtime' =>time(),]
];
$info1 = Db::name('app_service')->fetchSql(true)->insertAll($data);

Sql:

INSERT INTO `app_service` (`name` , `state` , `reason` , `addtime`) VALUES ( '新增数据-批量1',1,'测试新增数据',1673242931 ) , ( '新增数据-批量2',1,'测试新增数据',1673242931 )

返回结果:

是2,为成功添加条数;错误,则抛出异常。

11.更新数据

save

根据自增id,去识别更新

Db::name('app_service')->save(['id' => 18, 'name' => '编辑数据-测试']);

update

Db::name('app_service')->where('id', 18)->update(['name' => '编辑数据-测试']);

Sql:

UPDATE `app_service`  SET `name` = '编辑数据-测试3'  WHERE  `id` = 18

返回结果:

返回修改影响条数

12.Raw更新

Db::name('app_service')->where('id', 18)->update(['name'    => '数据raw操作','state'    => Db::raw('state-1'),'addtime'  => Db::raw('addtime+3')]);

Sql:

UPDATE `app_service`  SET `name` = '数据raw操作' , `state` = state-1 , `addtime` = addtime+3  WHERE  `id` = 18

13.自增/自减

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

自增

Db::name('app_service')->where('id', 18)->inc('name', 1)->update();Db::name('app_service')->where('id', 18)->inc('addtime')->update();

自减

Db::name('app_service')->where('id', 18)->dec('addtime', 1)->update();Db::name('app_service')->where('id', 18)->dec('addtime')->update();

注意:当要操作的字段值为NULL时,自增/自减不执行。

15.删除数据

条件删除

Db::name('app_service')->where('id',18)->delete();Db::name('app_service')->where('id','>',15)->delete();

返回结果:

删除条数

16.删除全部数据

Db::name('app_service')->delete(true);

需要设置为true,否则抛出“没有条件不会执行删除操作”提示

相关内容

热门资讯

脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...