#ThinkPHP#视图下order排序

上一篇博客中说道:对于utf-8数据表,按照姓名排序使用 convert(realname using gbk) asc 方法。但是在视图查询的过程中:


$list = $modelView->where($condition)->order('convert(realname using gbk) asc')->select();

结果order by的地方变成了 ORDER BY convert(realname using

看了下ViewModel.class.php中checkOrder方法:


protected function checkOrder($order='') {
 if(is_string($order) && !empty($order)) {
 $orders = explode(',',$order);
 $_order = array();
 foreach ($orders as $order){
<span style="color: #ff0000;"><strong> $array = explode(' ',$order);</strong></span>
<span style="color: #ff0000;"><strong> $field = $array[0];</strong></span>
<span style="color: #ff0000;"><strong> $sort = isset($array[1])?$array[1]:'ASC';</strong></span>
 // 解析成视图字段
 foreach ($this->viewFields as $name=>$val){
 $k = isset($val['_as'])?$val['_as']:$name;
 $val = $this->_checkFields($name,$val);
 if(false !== $_field = array_search($field,$val,true)) {
 // 存在视图字段
 $field = is_numeric($_field)?$k.'.'.$field:$k.'.'.$_field;
 break;
 }
 }
 $_order[] = $field.' '.$sort;
 }
 $order = implode(',',$_order);
 }
 return $order;
 }

红色的地方标明了为啥会出现这种现象。

解决办法使用数组传递:


order(array('convert(realname using gbk)'=>'asc'))

#ThinkPHP#视图下order排序》有2个想法

发表评论

邮箱地址不会被公开。