在 Yii 2.0 中,基于数据提供者,列表接口排序的支持,排序规则参考禅道的实现

1、查看禅道的任务列表页面,其排序默认为基于 ID 降序排列,如图1

查看禅道的任务列表页面,其排序默认为基于 ID 降序排列

图1

2、点击 消耗 字段后,三角正立显示为深色,表示当前排序为基于 消耗 升序排列,且其值相同的情况下,再基于 ID 升序排列,如图2

点击 消耗 字段后,三角正立显示为深色,表示当前排序为基于 消耗 升序排列,且其值相同的情况下,再基于 ID 升序排列

图2

3、再次点击 消耗 字段后,三角倒立显示为深色,表示当前排序为基于 消耗 降序排列,且其值相同的情况下,再基于 ID 降序排列,如图3

再次点击 消耗 字段后,三角倒立显示为深色,表示当前排序为基于 消耗 降序排列,且其值相同的情况下,再基于 ID 降序排列

图3

4、如果希望恢复至默认排序,即基于 ID 降序排列,则点击 2 次 ID 字段后(第 1 次为升序,第 2 次为降序),三角倒立显示为深色,表示当前排序为基于 ID 降序排列,如图4

如果希望恢复至默认排序,即基于 ID 降序排列,则点击 2 次 ID 字段后(第 1 次为升序,第 2 次为降序),三角倒立显示为深色,表示当前排序为基于 ID 降序排列

图4

5、数据提供者的相应配置如下,通过 yii/data/Sort::$defaultOrder 来指定默认的排序为基于 ID 降序排列

        return Yii::createObject([
            'class' => ActiveDataProvider::className(),
            'query' => $query,
            'pagination' => [
                'params' => $requestParams,
            ],
            'sort' => [
                'defaultOrder' => [
                    'id' => SORT_DESC,
                ],
                'params' => $requestParams,
            ],
        ]);

6、GET 请求:http://api.pcs-api.localhost/v1/plans ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 ID 降序排列,如图5

GET 请求:http://api.pcs-api.localhost/v1/plans ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 ID 降序排列

图5

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `id` DESC LIMIT 20

7、GET 请求:http://api.pcs-api.localhost/v1/plans?sort=importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 升序排列(期望为基于 importance 与 id 升序排列),如图6

GET 请求:http://api.pcs-api.localhost/v1/plans?sort=importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 升序排列(期望为基于 importance 与 id 升序排列)

图6

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `importance` LIMIT 20

8、GET 请求:http://api.pcs-api.localhost/v1/plans?sort=-importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 降序排列(期望为基于 importance 与 id 降序排列),如图7

GET 请求:http://api.pcs-api.localhost/v1/plans?sort=-importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 降序排列(期望为基于 importance 与 id 降序排列)

图7

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `importance` DESC LIMIT 20

9、数据提供者的相应配置调整如下,通过 yii/data/Sort::$defaultOrder 来指定 id 属性的 asc(基于 id 升序排列) 和 desc(基于 id 降序排列) 元素;importance 属性的 asc(基于 importance 与 id 升序排列) 和 desc(基于 importance 与 id 降序排列) 元素;is_united 属性的 asc(基于 is_united 与 id 升序排列) 和 desc(基于 is_united 与 id 降序排列) 元素

        return Yii::createObject([
            'class' => ActiveDataProvider::className(),
            'query' => $query,
            'pagination' => [
                'params' => $requestParams,
            ],
            'sort' => [
                'defaultOrder' => [
                    'id' => SORT_DESC,
                ],
                'attributes' => [
                    'id' => [
                        'asc' => ['id' => SORT_ASC],
                        'desc' => ['id' => SORT_DESC],
                        'default' => SORT_ASC,
                        'label' => Yii::t('model/plan', 'ID'),
                    ],
                    'importance' => [
                        'asc' => ['importance' => SORT_ASC, 'id' => SORT_ASC],
                        'desc' => ['importance' => SORT_DESC, 'id' => SORT_DESC],
                        'default' => SORT_ASC,
                        'label' => Yii::t('model/plan', 'Importance'),
                    ],
                ],
                'params' => $requestParams,
            ],
        ]);

10、GET 请求:http://api.pcs-api.localhost/v1/plans ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 ID 降序排列

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `id` DESC LIMIT 20

11、GET 请求:http://api.pcs-api.localhost/v1/plans?sort=importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 与 id 升序排列,如图8

GET 请求:http://api.pcs-api.localhost/v1/plans?sort=importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 与 id 升序排列

图8

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `importance`, `id` LIMIT 20

12、GET 请求:http://api.pcs-api.localhost/v1/plans?sort=-importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 与 id 降序排列,如图9

GET 请求:http://api.pcs-api.localhost/v1/plans?sort=-importance ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 importance 与 id 降序排列

图9

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `importance` DESC, `id` DESC LIMIT 20

13、GET 请求:http://api.pcs-api.localhost/v1/plans?sort=id ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 id 升序排列,如图10

GET 请求:http://api.pcs-api.localhost/v1/plans?sort=id ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 id 升序排列

图10

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `id` LIMIT 20

14、GET 请求:http://api.pcs-api.localhost/v1/plans?sort=-id ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 id 降序排列,如图11

GET 请求:http://api.pcs-api.localhost/v1/plans?sort=-id ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 id 降序排列

图11

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `id` DESC LIMIT 20

15、GET 请求:http://api.pcs-api.localhost/v1/plans?sort=create_user_id ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 id 降序排列(默认排序),并未基于 create_user_id 升序排列(因为 create_user_id 属性未定义),如图12

GET 请求:http://api.pcs-api.localhost/v1/plans?sort=create_user_id ,生成 SQL , SQL 语句当中的 ORDER BY 子句基于 id 降序排列(默认排序),并未基于 create_user_id 升序排列(因为 create_user_id 属性未定义)

图12

SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `id` DESC LIMIT 20

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/250478.html

(0)
上一篇 2022年4月29日
下一篇 2022年4月29日

相关推荐

发表回复

登录后才能评论