2018-05-30 17:05:04 645次浏览 2条回答 0 悬赏 20 金钱

数据表字段ratingdouble类型,

//Post模型重写find方法
public static function find()
{
   return new PostQuery(get_called_class());
}

//PostQuery中定义
public function rating()
{
   return $this->addOrderBy(['rating' => SORT_DESC]);
}

在调用find()->rating()方法时,这个一直无法倒叙排列。谁知道什么原因吗?

补充于 2018-05-30 17:09

上述生成的sql如下:

SELECT * FROM `post` WHERE `forum_id`='10000' ORDER BY `rating` LIMIT 20

经过测试,将rating改为其它int类型字段,比如created_at,可以正常排序。唯独double类型字段不可以。

  • 回答于 2018-05-30 17:56 举报

    测试这边是能排序的,你贴出你的 addOrderBy() 看下

    1 条回复
    回复于 2018-05-30 18:52 回复
    //PostController
    $query = Post::find()->active()->sort($sort);
            $dataProvider = new ActiveDataProvider([
                'query' => $query->with(['creator', 'updater'])->where(['forum_id' => $id]),
            ]);
    
    
    //PostQuery
    /**
         * 活跃帖子
         * @return $this
         */
        public function active()
        {
            return $this->andWhere(['status' => Post::STATUS_ACTIVE]);
        }
        
        /**
         * 根据sort参数进行排序
         * @param $sort
         * @return $this
         */
        public function sort($sort)
        {
            switch ($sort) {
                case 'recent' :
                    return $this->recent();
                    break;
                case 'latest' :
                    return $this->latest();
                    break;
                case 'rating':
                    return $this->rating();
                    break;
                default:
                    return $this->latest();
            }
        }
    

    PostQuery extends ActiveQuery 因此具备了addOrderBy()方法。访问参数&sort=rating时走的是$this->rating()方法。这里都对,唯独debug看到它生成的sql代码如上面问题补充所示。

  • 回答于 2018-06-06 21:45 举报

    public static function find() { return new PostQuery(get_called_class()); }
    这样写不合适的。用YII::createObject()去实例化。

    2 条回复
    回复于 2018-06-10 21:56 回复

    这二者有什么区别吗?

    回复于 2018-06-11 09:32 回复

    区别大了.看一下没重写之前是怎么写的?再看看 createObject 方法什么意思.

您需要登录后才可以回答。登录 | 立即注册
mydzoo
见习主管

mydzoo

注册时间:2017-01-05
最后登录:2018-06-13
在线时长:18小时12分
粉丝1
金钱250
威望0
积分430

热门问题