全部
常见问题
产品动态
精选推荐

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

管理 管理 编辑 删除

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')
    ]);

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


CRMEB-慕白寒窗雪 最后编辑于2023-03-06 17:50:52

快捷回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
回复从新到旧

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest==1? '取消推荐': '推荐'}}
{{item.floor}}#
{{item.user_info.title}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

作者 管理员 企业

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}   {{itemc.ip_address}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
回复
回复
1963
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

CRMEB-慕白寒窗雪 作者
社区运营专员---高冷のBoy | 呆萌のGirl

回答

2122

发布

1773

经验

44562

快速安全登录

使用微信扫码登录
{{item.label}} {{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
加精
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 开源下载 CRMEB官方论坛 帮助文档
返回顶部 返回顶部
CRMEB客服