掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
通常有這樣一個需求:發(fā)布一篇帖子,帖子中包含一些圖片等附件,所以在數(shù)據(jù)結(jié)構(gòu)上面需要把附件表和帖子表關(guān)聯(lián)起來;在發(fā)布帖子的時候先插入帖子表,返回帖子的id,然后再插入附件表記錄(使用帖子id關(guān)聯(lián)起來)。這樣的需求就需要先插入A表得到其自增的id號,然后再插入B表。
但某項(xiàng)目從thinkphp5升級到thinkphp6后,類似的流程就不能夠?qū)崿F(xiàn)了,發(fā)現(xiàn)返回的自增ID都變成了1,而不是具體的自增ID號。那么是不是thinkphp6刪除了這個功能呢?并不是,通過查看thinkphp關(guān)于數(shù)據(jù)庫操作方式發(fā)現(xiàn)insert方法參數(shù)有所調(diào)整。
thinkphp5關(guān)于insert方法節(jié)選如下:
?/**
* 插入記錄
* @access public
* @param mixed $data 數(shù)據(jù)
* @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關(guān)于insert方法節(jié)選如下:
/**
* 插入記錄
* @access public
* @param array $data 數(shù)據(jù)
* @param boolean $getLastInsID 返回自增主鍵
* @return integer|string
*/
public function insert(array $data = [], bool $getLastInsID = false){…}
從上面兩個對比可以看得出來,insert方法參數(shù)從4個改為2個,如果依然使用thinkphp5常用的insert($data,false,true)來返回自增ID會出現(xiàn)異常,因?yàn)閠hinkphp6的是否返回自增參數(shù)改為了該方法的第二個參數(shù);這個情況下應(yīng)該使用inset($data,true)來實(shí)現(xiàn)插入后返回自增。
tp5數(shù)據(jù)庫常用操作方法見:
thinkphp\library\think\db\Query.php
tp6數(shù)據(jù)庫常用操作方法見:
vendor\topthink\think-orm\src\db\BaseQuery.php
最后,如果沒有特別需求,已經(jīng)上線的項(xiàng)目不建議從thinkphp5升級到thinkphp6,特別是業(yè)務(wù)邏輯復(fù)雜的項(xiàng)目,需要調(diào)整的地方比較多。
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流