$data = $_POST; $data['user_id'] = 1; $data['create_at'] = date("Y-m-d H:i:s"); $data['update_at'] = date("Y-m-d H:i:s"); $data['is_enable'] = 1; $data['is_visible'] = 1; $categoryModel = new \Admin\Model\CategoryModel(); $footPosition = $categoryModel->getFootPosition(); $data['position'] = intval($footPosition) + 1; // var_dump($data); $categoryModel->add($data);
我開始以為是position類型不對,可是不論轉為string還是int,還是一樣報非法資料對象錯誤。$data['position'] = intval($footPosition) + 1;這個注釋掉插入資料就沒問題了。求助啊.
var_dump後的結果如下,看不出什麼問題啊。
array(7) { ["category_name"]=> string(12) "風言風語" ["user_id"]=> int(1) ["create_at"]=> string(19) "2015-04-05 15:39:41" ["update_at"]=> string(19) "2015-04-05 15:39:41" ["is_enable"]=> int(1) ["is_visible"]=> int(1) ["position"]=> int(2) }
資料庫欄位position,已確定不包含空格,及欄位名稱是一致的。
回複討論(解決方案)
$footPosition = $categoryModel->getFootPosition();
後,列印出 $footPosition 看看是些什麼
另外,出錯時應給出原始的錯誤資訊
問題已解決。進了ThinkPhp\Model,_facade函數,
foreach ($data as $key=>$val){ file_put_contents("xiaobin.txt", $key."\n", FILE_APPEND) ; file_put_contents("xiaobin.txt", $fields, FILE_APPEND); if(!in_array($key,$fields,true)){ if(APP_DEBUG){ E(L('_DATA_TYPE_INVALID_').':['.$key.'=>'.$val.']'); } unset($data[$key]); }elseif(is_scalar($val)) { // 欄位類型檢查 和 強制轉換 $this->_parseType($data,$key); } }
發現field數組結果如下:category_iduser_idcategory_nameblog_numcreate_atupdate_atis_enableis_visiblepre_positionnext_positioncategory_idArray,這些都是資料庫列名,其中pre_position,next_position是開始建表時的欄位,後來我刪了這兩列,添了position這一列。緩衝已禁用,所以清除緩衝也沒用。
最後發現這資料儲存在Runtime/Data/_fields裡,刪了就好了。