Pengurutan default penyedia data Yii2


99

Di Yii 1.1 kode ini berfungsi untuk pengurutan default:

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

Bagaimana penyortiran default dapat diatur di Yii2?

Mencoba kode di bawah ini, tetapi tidak ada hasil:

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

Jawaban:


175

Saya pikir ada solusi yang tepat. Konfigurasikan yii\data\Sortobjek:

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

Tautan dokumen resmi


Solusi ini berfungsi tetapi pencarian di indeks tidak berfungsi sekarang.
Roby Sottini

42

Atau

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

1
Ini lebih kompatibel dengan keluaran GII default
userlond

15

defaultOrder berisi larik di mana kuncinya adalah nama kolom dan nilainya adalah a SORT_DESCatau SORT_ASCkarena itulah kode di bawah ini tidak berfungsi.

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

Jalan yang benar

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

Catatan: Jika kueri sudah menentukan klausa orderBy, instruksi pengurutan baru yang diberikan oleh pengguna akhir (melalui konfigurasi pengurutan) akan ditambahkan ke klausa orderBy yang ada. Klausa batas dan offset yang ada akan ditimpa oleh permintaan pagination dari pengguna akhir (melalui konfigurasi pagination).

Anda dapat mempelajari detailnya dari Yii2 Guide of Data Provider

Mengurutkan Dengan meneruskan objek Sortir dalam kueri

 $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

jika Anda memiliki CRUD (indeks) dan Anda perlu mengatur pengurutan default pengontrol Anda untuk GridView, atau ListView, atau lebih ... Contoh

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,
    ]);
}

Anda perlu menambahkan

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

2

Coba yang ini

$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

Anda dapat mengubah model pencarian seperti ini

$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]]
                                ]); 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.