问题
如果字段值有1,2,10需要进行排序,如果数据库中类型为vacher类型,那么排序结果为1,10,2,而不是1,2,10
问题代码
如果是字符串,比较大小会先按位进行比较,那么首位的2显然大于10的首位1,排在10的后面
$data['operation_code'] = Db::table('wip_operation_plan')
->where(['wip_entity_name' => $wip_entity_name])
->order(array('operation_seq_num ' => 'asc'))
->select();
解决代码
$data['operation_code'] = Db::table('wip_operation_plan')
->where(['wip_entity_name' => $wip_entity_name])
->orderRaw('CAST(operation_seq_num AS UNSIGNED) ASC')
->select();
解析
使用 orderRaw 方法执行原生的 SQL 排序功能,将字符串类型的字段转换为数值类型后再排序。
使用 MySQL 中的 CAST 函数将字符串转换为数值,并指定转换的值的类型(比如 UNSIGNED 表示无符号整数),然后在 orderRaw 方法中使用转换后的字段进行排序
->orderRaw('CAST(operation_seq_num AS UNSIGNED) ASC')
上述就表述将字段operation_seq_num转换为数值类型,并进行正序排序
结果
1,2,10