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']
]);
Sarvar Nishonboev
sumber

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

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

Atau

       $dataProvider->setSort([
        'defaultOrder' => ['topic_order'=>SORT_DESC],
        'attributes' => [...
Kristīne Glode
sumber
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();
Parth Chavda
sumber
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];
Andrey Matveev
sumber
2

Coba yang ini

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

$sort = $dataProvider->getSort();

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

$dataProvider->setSort($sort);
pengguna210195
sumber
1
$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
    'sort'=> ['defaultOrder' => ['iUserId'=>SORT_ASC]] 
]);
Suraj Vaghela
sumber
-1

Anda dapat mengubah model pencarian seperti ini

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => ['user_id ASC, document_id ASC']
        ]
    ]);
brahmeswara rao Kamineni
sumber
-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]]
                                ]); 
jagjit singh
sumber