資料庫裡的欄位是uid, uname
頁面表單的name分別是id和name
Model代碼:
protected $_map = array('id' => 'uid','name' => 'uname',);
Action代碼:
$model = M('Demo');$list = $model -> select();print_r($list);$list = $model -> parseFieldsMap($list);echo '
';print_r($list);
輸出結果都一樣
都是
Array ( [0] => Array ( [uid] => 1 [uname] => 測試 ) )
問題在這裡:
按官方的說法是parseFieldsMap轉了以後
最終輸出的那個$list應該是
Array ( [0] => Array ( [id] => 1 [name] => 測試 ) )
才對啊?
網上到處搜不到
哪位知道還請不吝賜教啊!
回複討論(解決方案)
其實 你應該區分 M 和 D 方法的 M的方法是不載入自己定義的模型檔案, 而$_map 是定義在你自己建立的模型檔案中, 所以應該這樣調用: $list = D('Demo') -> parseFieldsMap($list);
其實 你應該區分 M 和 D 方法的 M的方法是不載入自己定義的模型檔案, 而$_map 是定義在你自己建立的模型檔案中, 所以應該這樣調用: $list = D('Demo') -> parseFieldsMap($list);
官方文檔裡寫的就是M,而且我試過D,一樣沒用~
由 parseFieldsMap 方法的定義可知:
他只能作用於一維數組,即
Array ( [uid] => 1 [uname] => 測試 )
變為
Array ( [id] => 1 [name] => 測試 )
/** +---------------------------------------------------------- * 處理欄位對應 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param array $data 當前資料 * @param integer $type 類型 0 寫入 1 讀取 +---------------------------------------------------------- * @return array +---------------------------------------------------------- */ public function parseFieldsMap($data,$type=1) { // 檢查欄位對應 if(!empty($this->_map)) { foreach ($this->_map as $key=>$val){ if($type==1) { // 讀取 if(isset($data[$val])) { $data[$key] = $data[$val]; unset($data[$val]); } }else{ if(isset($data[$key])) { $data[$val] = $data[$key]; unset($data[$key]); } } } } return $data; }
/** * 處理欄位對應 * @access public * @param array $data 當前資料 * @param integer $type 類型 0 寫入 1 讀取 * @return array */ public function parseFieldsMap($data,$type=1) { // 檢查欄位對應 if(!empty($this->_map)) { foreach($data as $dkey => $dval){ if(is_array($dval)){ $data[$dkey] = self::parseFieldsMap($dval, $type); }else{ foreach ($this->_map as $key=>$val){ if($type==1) { // 讀取 if(isset($data[$val])) { $data[$key] = $data[$val]; unset($data[$val]); } }else{ if(isset($data[$key])) { $data[$val] = $data[$key]; unset($data[$key]); } } } return $data; } } /* foreach ($this->_map as $key=>$val){ if($type==1) { // 讀取 if(isset($data[$val])) { $data[$key] = $data[$val]; unset($data[$val]); } }else{ if(isset($data[$key])) { $data[$val] = $data[$key]; unset($data[$key]); } } }*/ } return $data; }