• tp5.1 order函数排序无效和orderRaw自定义处理排序


    写代码的时候发现一个排序的问题tp5.1 的order 函数 如果排序字段是字符串类型的小数,你会发现使用order函数怎么排序都不正常,看到这个现象你们大概也猜到原因了,到最后执行sql的时候类型没有转化,那怎么处理这个呢?

    我使用的是sql 直接转换,那么问题来了,怎么自定义排序,或者说怎么在模型排序中间加上自定义的一段sql排序,可以使用orderRaw函数,看看源码的介绍

    	/**
         * 表达式方式指定Field排序
         * @access public
         * @param  string $field 排序字段
         * @param  array  $bind  参数绑定
         * @return $this
         */
        public function orderRaw($field, $bind = [])
        {
            if ($bind) {
                $this->bindParams($field, $bind);
            }
    
            $this->options['order'][] = $this->raw($field);
    
            return $this;
        }
    

    看这个源码可以知道,第一个参数你写什么直接回原封不动的丢到sql中去,第二个参数是参数绑定只有在外部传值的时候需要(从浏览器获取值传入sql),所以,忽略$bind参数,让它为空就好(不管它)

    所以最后的排序的的写法为:

    return $this->hasMany('testuModel','product_id','id')->orderRaw("CONVERT(price, DECIMAL) ASC")->order('count', 'asc')->order('id', 'desc')
    

    执行的sql

    SELECT * FROM `test` WHERE  `product_id` = 3  AND `product_id` = 3 ORDER BY CONVERT(price, DECIMAL) ASC,`count` ASC,`id` DESC
    
  • 相关阅读:
    hdu 1849 Rabbit and Grass(nim)
    sg函数模板
    hdu 1848 Fibonacci again and again(sg)
    hdu 1847 Good Luck in CET-4 Everybody!(sg)
    hdu 1846 Brave Game(bash)
    hdu 1517 A Multiplication Game(必胜态,必败态)
    hdu 1536/ hdu 1944 S-Nim(sg函数)
    hdu 2509 Be the Winner(anti nim)
    hdu 1907 John(anti nim)
    zoj 3965 Binary Tree Restoring(搜索)
  • 原文地址:https://www.cnblogs.com/makalochen/p/13693258.html
Copyright © 2020-2023  润新知