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