上一篇博客中说道:对于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){
$array = explode(' ',$order);
$field = $array[0];
$sort = isset($array[1])?$array[1]:'ASC';
// 解析成视图字段
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'))