没有不值得去解决的问题,也没有不值得去学习的技术!

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

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


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理