thinkphp6中insert方法不返回自增ID?数据库操作变动之insert

2022-09-16 15:56 栏目:技术开发 查看(9621)

通常有这样一个需求:发布一篇帖子,帖子中包含一些图片等附件,所以在数据结构上面需要把附件表和帖子表关联起来;在发布帖子的时候先插入帖子表,返回帖子的id,然后再插入附件表记录(使用帖子id关联起来)。这样的需求就需要先插入A表得到其自增的id号,然后再插入B表。

但某项目从thinkphp5升级到thinkphp6后,类似的流程就不能够实现了,发现返回的自增ID都变成了1,而不是具体的自增ID号。那么是不是thinkphp6删除了这个功能呢?并不是,通过查看thinkphp关于数据库操作方式发现insert方法参数有所调整。

thinkphp5关于insert方法节选如下:

 /**
* 插入记录
* @access public
* @param mixed $data 数据
* @param boolean $replace 是否replace
* @param boolean $getLastInsID 返回自增主键
* @param string $sequence 自增序列名
* @return integer|string
*/
public function insert(array $data = [], $replace = false, $getLastInsID = false, $sequence = null){…}

thinkphp6关于insert方法节选如下:

/**
* 插入记录
* @access public
* @param array $data 数据
* @param boolean $getLastInsID 返回自增主键
* @return integer|string
*/
public function insert(array $data = [], bool $getLastInsID = false){…}

从上面两个对比可以看得出来,insert方法参数从4个改为2个,如果依然使用thinkphp5常用的insert($data,false,true)来返回自增ID会出现异常,因为thinkphp6的是否返回自增参数改为了该方法的第二个参数;这个情况下应该使用inset($data,true)来实现插入后返回自增。

tp5数据库常用操作方法见:

thinkphp\library\think\db\Query.php

tp6数据库常用操作方法见:

vendor\topthink\think-orm\src\db\BaseQuery.php

最后,如果没有特别需求,已经上线的项目不建议从thinkphp5升级到thinkphp6,特别是业务逻辑复杂的项目,需要调整的地方比较多。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:thinkphp6中insert方法不返回自增ID?数据库操作变动之insert - 微构网络
分享: