国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

關于ThinkPHP框架addAll()方法的設計問題填坑

2019-11-08 02:30:30
字體:
來源:轉載
供稿:網友
今天在講解Thinkphp框架的時候在使用ThinkPHP基礎模型類提供的addAll()方法進行多條數據寫入時報錯了,而且使用模型的getError()都獲取不到錯誤提示!沒錯,獲取不到錯誤!所以我認為這是ThinkPHP框架設計中存在的Bug。在學生都去吃飯時我自己翻看了框架底層對于addAll()的實現。

我的課堂代碼是這樣寫的:

if (M('SubOrder')->addAll($allGoods) === false) {    $this->rollback();    throw new Exception('提交訂單失敗,請稍后再試!', 0);}

因為為了獲取數據方便我的$allGoods是使用goods_id來索引的,錯誤就出在這兒但是讓我恨不能理解,讓我們一一道來。

我的$allGoods的結構是這樣的

array(2) {  [5] => array(4) {    ["goods_id"] => string(1) "5"    ["PRice"] => string(6) "123.00"    ["goods_num"] => string(1) "2"    ["order_id"] => string(2) "16"  }  [15] => array(4) {    ["goods_id"] => string(2) "15"    ["price"] => string(4) "0.10"    ["goods_num"] => string(1) "2"    ["order_id"] => string(2) "16"  }}

查看其它都沒有問題的情況下唯一可能出錯的就是數據的索引方式了,難道TP只能使用從0開始索引的二維數組?這讓我很不能理解,作為一個框架應該考慮到通用性,所以翻看了TP中MySQL驅動里關于insertAll()的實現,因為model中的addAll()就是調用驅動里的insertAll()實現的:

$result = $this->db->insertAll($dataList,$options,$replace);

所以就是這樣了!

public function insertAll($dataSet,$options=array(),$replace=false) {    $values  =  array();    $this->model  =   $options['model'];    if(!is_array($dataSet[0])) return false;   //問題就出在這兒

問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-

框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下

public function insertAll($dataSet,$options=array(),$replace=false) {    $values  =  array();    $this->model  =   $options['model'];    $firstRow = array_shift($dataSet);    //取出傳入數組的第一條數據    if(!is_array($firstRow)) return false;   //根據框架的思想進行簡單的數組判斷    $dataSet[] = $firstRow;     //重新賦值到待寫入數組的元素中

至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五家渠市| 潜江市| 蚌埠市| 安西县| 东辽县| 清远市| 彩票| 阳春市| 拜泉县| 宜州市| 论坛| 葫芦岛市| 新龙县| 华宁县| 会同县| 清远市| 晋江市| 顺昌县| 丰宁| 合山市| 邵武市| 道孚县| 延长县| 辽阳县| 阿克苏市| 兴仁县| 安阳市| 吕梁市| 华坪县| 柳江县| 高唐县| 沐川县| 墨竹工卡县| 泽库县| 西宁市| 县级市| 保康县| 大同县| 桓台县| 桃园县| 蕉岭县|