thinkphp 视图模型修正版
BUG描述:
当视图模型下使用 mysql函数的时候,函数的参数超过3个以上(包含3个),视图模型解析会只解析第一个参数和最后一个参数,
举个例子:
$model = M('archiveview');
$model->field("concat('aa','bb','cc') as dd")->select();
$model->getLastSql() 得到的结果 将是:
select concat('aa','cc') as dd from ...
代码分析:
源文件相应代码处:大概在217行左右,
原因是 foreach遍历 仅仅检查 含(, as 关键字的数组元素是不够的,因为,使用mysql函数带多个参数后,explode 分割 会得到 中间几个并没有带(,),as等字符的数组元素,视图模型亦然不会处理,但之后,视图会将其过滤掉.
关键代码修改:(214行--225行 左右)
// 解析成视图字段
$array = array();
//将军 2013-01-01 21:16:46 引入全局变量,修正函数多参数支持
$GLOBALS['_tmpa'] = 0;
foreach ($fields as $key=>$field){
if(strpos($field,'(')) $GLOBALS['_tmpa'] =1;
if($GLOBALS['_tmpa']==1 || strpos(strtolower($field),' as ')){
// 使用了函数或者别名
$array[] = $field;
unset($fields[$key]);
}
if(strpos($field,')')) $GLOBALS['_tmpa'] =0;
}