ThinkPHP6 数据库增删改查操作整理

环境配置:

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,否则抛出“没有条件不会执行删除操作”提示

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值