📅  最后修改于: 2023-12-03 15:29:01.915000             🧑  作者: Mango
在 Yii2 中使用 ActiveQuery 查询数据时,一般会使用 orderBy()
方法来指定排序方式。
如果没有指定排序方式,默认会按照主键升序排列。当然,我们也可以通过 $model->primaryKey()
方法来指定需要排序的字段。
以下是示例代码:
$models = Model::find()
->orderBy(['attribute_name' => SORT_ASC])
->all();
其中,['attribute_name' => SORT_ASC]
表示按照 attribute_name
字段升序排列。
如果多个字段需要进行排序,则可以在数组中添加多项:
$models = Model::find()
->orderBy([
'attribute_1' => SORT_ASC,
'attribute_2' => SORT_DESC,
])
->all();
此外,还可以在 orderBy()
方法中使用回调函数,自定义排序规则,例如:
$models = Model::find()
->orderBy(function ($model) {
return [
'status' => $model->status,
'created_at' => $model->created_at,
];
})
->all();
在上述示例中,回调函数返回一个数组,其中包含了需要排序的字段及其对应的值。
需要注意的是,当使用回调函数自定义排序规则时,不能和数组方式混合使用。
在使用 ActiveDataProvider 做数据提供器时,也可以使用 sort
属性指定排序规则:
$dataProvider = new ActiveDataProvider([
'query' => Model::find(),
'sort' => [
'defaultOrder' => [
'attribute_name' => SORT_ASC,
],
'attributes' => [
'attribute_name',
'attribute_1',
'attribute_2' => [
'asc' => ['attribute_2' => SORT_ASC],
'desc' => ['attribute_2' => SORT_DESC],
'default' => SORT_ASC,
'label' => 'Attribute 2',
],
],
],
]);
以上是默认排序的实现方法,通过 orderBy()
方法或 sort
属性,可以轻松地指定排序规则。