ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP 3.0 parseFieldsMap の問題

ThinkPHP 3.0 parseFieldsMap の問題

WBOY
WBOYオリジナル
2016-06-23 14:26:561079ブラウズ

データベース内のフィールドは uid、uname です
ページフォームの名前はそれぞれ id と name です

モデルコード:

	protected $_map = array(		'id' => 'uid',		'name' => 'uname',	);


アクションコード:
		$model = M('Demo');		$list = $model -> select();		print_r($list);		$list = $model -> parseFieldsMap($list);		echo '<br/><br/>';		print_r($list);


出力結果は同じです
はすべて

配列( [0] = > Array ( [uid] => 1 [uname] => Test ) )


問題はここにあります:
公式声明によると、parseFieldsMap が変換された後
最終出力 $list

Array ( [0] => Array ( [id] => 1 [name] => Test ) )

ですよね?
インターネットで探しても見つかりません
知っている方はぜひ教えてください!


ディスカッションへの返信 (解決策)

実際、M メソッドと D メソッドは区別する必要があります。M メソッドは定義したモデル ファイルをロードせず、$_map は作成したモデル ファイル内で定義されます。 $list = D('Demo') -> parseFieldsMap($list);

実際、M メソッドはモデル ファイルをロードしません。 $_map は独自に定義されていますが、作成されたモデル ファイルでは次のように呼び出す必要があります: $list = D('Demo') -> parseFieldsMap($list); 公式ドキュメントには M と書かれています。 D を試しましたが、それもうまくいきませんでした~

それは parseFieldsMap メソッドの定義からわかります:

1 次元配列、つまり

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;    }

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。