ThinkPHP 模型 add() 拋出「非法資料對象」,通常是傳入資料陣列包含模型未定義的欄位、或欄位值類型與資料庫定義不符 (如整數欄位傳入字串、長度超限)。
protected $fields = [...]; 或資料庫欄位列表,確認允許寫入的欄位。$data = array_intersect_key($data, array_flip($model->getDbFields()));intval($val),浮點 floatval(),日期 date('Y-m-d H:i:s', strtotime($val))。$model->validate(false)->add($data); 若成功,說明是驗證規則問題,逐條檢查 _validate 陣列。原帖後續補充:$data['position'] = intval($footPosition) + 1; 中 $footPosition 為 null 或非數字字串,導致 intval 結果為 0,若資料庫欄位 position 設為 UNSIGNED NOT NULL 且無預設值,或模型驗證規則要求 >0,即觸發非法資料對象。註釋該行即正常,證實為此欄位值問題。
protected $type = ['position' => 'integer', 'create_at' => 'timestamp']; (TP5/6) 自動轉型。validate 驗證器類別,而非依賴模型隱性驗證。throw new ValidateException($validate->getError())。「非法資料對象」本質是資料未通過模型驗證/過濾,逐欄對照定義即可定位。