Sắp xếp mặc định của nhà cung cấp dữ liệu Yii2


99

Trong Yii 1.1, mã này hoạt động để sắp xếp mặc định:

$dataProvider = new CActiveDataProvider('article',array(
    'sort'=>array(
        'defaultOrder'=>'id DESC',
    ),
));

Cách sắp xếp mặc định có thể được đặt trong Yii2?

Đã thử mã bên dưới, nhưng không có kết quả:

$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'sort' => ['defaultOrder'=>'topic_order asc']
]);

Câu trả lời:


175

Tôi nghĩ rằng có giải pháp thích hợp. Định cấu hình yii\data\Sortđối tượng:

 $dataProvider = new ActiveDataProvider([
     'query' => $query,
     'sort'=> ['defaultOrder' => ['topic_order' => SORT_ASC]],
 ]);

Liên kết tài liệu chính thức


Giải pháp này hoạt động nhưng tìm kiếm trong chỉ mục hiện không hoạt động.
Roby Sottini

42

Hoặc là

       $dataProvider->setSort([
        'defaultOrder' => ['topic_order'=>SORT_DESC],
        'attributes' => [...

1
Nó tương thích hơn với đầu ra GII mặc định
userlond

15

defaultOrder chứa một mảng trong đó khóa là tên cột và giá trị là một SORT_DESChoặc SORT_ASCđó là lý do tại sao mã bên dưới không hoạt động.

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => ['defaultOrder'=>'topic_order asc']
    ]);

Đúng cách

$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'sort' => [
        'defaultOrder' => [
            'topic_order' => SORT_ASC,
        ]
    ],
]);

Lưu ý: Nếu truy vấn đã chỉ định mệnh đề orderBy, các hướng dẫn đặt hàng mới do người dùng cuối đưa ra (thông qua cấu hình sắp xếp) sẽ được thêm vào mệnh đề orderBy hiện có. Bất kỳ điều khoản giới hạn và bù đắp hiện có nào sẽ bị ghi đè bởi yêu cầu phân trang từ người dùng cuối (thông qua cấu hình phân trang).

Bạn có thể tìm hiểu chi tiết từ Hướng dẫn Yii2 của Nhà cung cấp dữ liệu

Sắp xếp bằng cách chuyển đối tượng Sắp xếp trong truy vấn

 $sort = new Sort([
        'attributes' => [
            'age',
            'name' => [
                'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                'default' => SORT_DESC,
                'label' => 'Name',
            ],
        ],
    ]);

    $models = Article::find()
        ->where(['status' => 1])
        ->orderBy($sort->orders)
        ->all();

6

nếu bạn có CRUD (chỉ mục) và bạn cần đặt sắp xếp mặc định bộ điều khiển của mình cho GridView hoặc ListView hoặc hơn thế nữa ...

public function actionIndex()
{
    $searchModel = new NewsSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    // set default sorting
    $dataProvider->sort->defaultOrder = ['id' => SORT_DESC];

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

bạn cần thêm

$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];

2

Hãy thử cái này

$dataProvider = new ActiveDataProvider([
    'query' => $query,
]);

$sort = $dataProvider->getSort();

$sort->defaultOrder = ['id' => SORT_ASC];

$dataProvider->setSort($sort);

1
$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
    'sort'=> ['defaultOrder' => ['iUserId'=>SORT_ASC]] 
]);

-1

bạn có thể sửa đổi mô hình tìm kiếm như thế này

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => ['user_id ASC, document_id ASC']
        ]
    ]);

-2
    $modelProduct       =   new Product();
    $shop_id            =   (int)Yii::$app->user->identity->shop_id;

    $queryProduct       =   $modelProduct->find()
                            ->where(['product.shop_id'  => $shop_id]);


    $dataProviderProduct    =   new ActiveDataProvider([
                                    'query'         =>  $queryProduct,
                                     'pagination' => [ 'pageSize' => 10 ],
                                    'sort'=> ['defaultOrder' => ['id'=>SORT_DESC]]
                                ]); 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.