ThinkPHP 3.0的parseFieldsMap问题
程序员文章站
2022-04-20 10:21:23
...
数据库里的字段是uid, uname
页面表单的name分别是id和name
Model代码:
Action代码:
输出结果都一样
都是
Array ( [0] => Array ( [uid] => 1 [uname] => 测试 ) )
问题在这里:
按官方的说法是parseFieldsMap转了以后
最终输出的那个$list应该是
Array ( [0] => Array ( [id] => 1 [name] => 测试 ) )
才对啊?
网上到处搜不到
哪位知道还请不吝赐教啊!
页面表单的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; }
推荐阅读
-
从.NET CORE2.2升级到3.0过程及遇到的一些问题
-
ThinkPHP5.1表单令牌Token失效问题的解决
-
解决vuecli3.0热更新失效的问题
-
详解升级Android Studio3.0时遇到的几个问题
-
ThinkPHP框架实现session跨域问题的解决方法
-
android studio 3.0 升级 项目遇到的问题及更改思路(问题小结)
-
Android studio 3.0上进行多渠道打包遇到的问题小结(超简洁版)
-
更新Android Studio 3.0碰到的问题小结
-
解决nginx不支持thinkphp中pathinfo的问题
-
EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。