在 Yii 2.0 中,基于数据提供者,列表接口排序的支持,排序规则参考禅道的实现
1、查看禅道的任务列表页面,其排序默认为基于 ID 降序排列,如图1
2、点击 消耗 字段后,三角正立显示为深色,表示当前排序为基于 消耗 升序排列,且其值相同的情况下,再基于 ID 升序排列,如图2
3、再次点击 消耗 字段后,三角倒立显示为深色,表示当前排序为基于 消耗 降序排列,且其值相同的情况下,再基于 ID 降序排列,如图3
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
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
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
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
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
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
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
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
SELECT `pa_plan`.* FROM `pa_plan` GROUP BY `pa_plan`.`id` ORDER BY `id` DESC LIMIT 20
近期评论