Yii2 veri sağlayıcı varsayılan sıralaması


99

Yii 1.1'de bu kod varsayılan sıralama için çalışır:

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

Yii2'de varsayılan sıralama nasıl ayarlanabilir?

Aşağıdaki kod denendi, ancak sonuç yok:

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

Yanıtlar:


175

Bence uygun bir çözüm var. yii\data\SortNesneyi yapılandırın :

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

Resmi belge bağlantısı


Bu çözüm işe yarıyor, ancak dizindeki arama artık çalışmıyor.
Roby Sottini

42

Veya

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

1
Varsayılan GII çıktısıyla daha uyumludur
kullanıcı

15

defaultOrder , anahtarın bir sütun adı ve değerin bir sütun adı olduğu bir dizi içerir SORT_DESCveya SORT_ASCbu nedenle aşağıdaki kod çalışmaz.

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

Doğru yol

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

Not: Bir sorgu zaten orderBy yan tümcesini belirtiyorsa, son kullanıcılar tarafından verilen yeni sıralama talimatları (sıralama yapılandırması aracılığıyla) mevcut orderBy yan tümcesine eklenecektir. Son kullanıcılardan gelen sayfalandırma talebi (sayfalandırma yapılandırması yoluyla) mevcut tüm sınır ve mahsup cümlelerinin üzerine yazılacaktır.

Yii2 Veri Sağlayıcı Kılavuzundan ayrıntılı bilgi edinebilirsiniz

Sıralama nesnesini sorguda geçirerek sıralama

 $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();

7

CRUD'ye (dizin) sahipseniz ve denetleyicinizi GridView veya ListView veya daha fazlası için varsayılan sıralamayı ayarlamanız gerekiyorsa ... Örnek

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

eklemeye ihtiyacın var

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

SearchModel'i değiştirmeden kontrolörde yapmak istiyorsanız, gitmenin yolu budur. Teşekkürler!
nunorbatista

2

Bunu dene

$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

arama modelini bu şekilde değiştirebilirsiniz

$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]]
                                ]); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.