ThinkPHP 3.0的parseFieldsMap問題

來源:互聯網
上載者:User
資料庫裡的欄位是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;    }
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.