我有很多使用created_time
的模型。我希望所有的GridView都显示按created_time
DESC排序的模型。
现在我写这样的东西
$dataProvider = new \yii\data\ActiveDataProvider([
'query' => MyModel::find(),
'sort' => [
'defaultOrder' => [
'created_time' => SORT_DESC
]
],
]);
我没有编写所有sort
配置,而是尝试了以下方法,但没有任何作用。
使用容器
\Yii::$container->set(\yii\data\ActiveDataProvider::class,
[
'sort' => [
'defaultOrder' => [
'created_time' => SORT_DESC
]
]
]);
覆盖扩展类中的sort
。
class ActiveDataProvider extends \yii\data\ActiveDataProvider {
public $sort = [
'defaultOrder' => [
'created_time' => SORT_DESC
]
];
}
在扩展类中init()
之前的覆盖有效,但如果实例化尝试再次覆盖它将无效。
class ActiveDataProvider extends \yii\data\ActiveDataProvider {
public function init() {
$this->sort = [
'defaultOrder' => [
'created_time' => SORT_DESC
]
];
parent::init();
}
}
//but this won't work if I want to use the ascending
$dataProvider = new \app\components\data\ActiveDataProvider([
'query' => MyModel::find(),
'sort' => [
'defaultOrder' => [
'created_time' => SORT_ASC
]
],
]);
答案 0 :(得分:6)
要对单个GridView执行此操作,您可以将'defaultOrder' => ['created_time' => SORT_DESC]
添加到setSort()
接受的数组中:
$dataProvider->setSort([
'attributes' => [
'id',
...
],
'defaultOrder' => ['created_time' => SORT_DESC]
]);
答案 1 :(得分:3)
您应该为yii\data\Sort而不是yii\data\ActiveDataProvider执行此操作。请参阅$sort属性的文档。
1)使用容器:
use Yii;
...
Yii::$container->set(\yii\data\Sort::className(),
'defaultOrder' => [
'created_time' => SORT_DESC,
],
]);
2)覆盖课程:
class Sort extends yii\data\Sort
{
public $defaultOrder' = [
'created_time' => SORT_DESC,
];
}