php排序order,#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){

$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'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值