扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
通常有这样一个需求:发布一篇帖子,帖子中包含一些图片等附件,所以在数据结构上面需要把附件表和帖子表关联起来;在发布帖子的时候先插入帖子表,返回帖子的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小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流