Clasificación predeterminada del proveedor de datos Yii2

99

En Yii 1.1, este código funciona para la clasificación predeterminada:

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

¿Cómo se puede configurar la clasificación predeterminada en Yii2?

Intenté debajo del código, pero no hubo resultado:

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

Respuestas:

175

Creo que hay una solución adecuada. Configure el yii\data\Sortobjeto:

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

Enlace de documento oficial

Alex
fuente
Esta solución funciona, pero la búsqueda en el índice no funciona ahora.
Roby Sottini
42

O

       $dataProvider->setSort([
        'defaultOrder' => ['topic_order'=>SORT_DESC],
        'attributes' => [...
Kristīne Glode
fuente
1
Es más compatible con la salida GII predeterminada
userlond
15

defaultOrder contiene una matriz donde la clave es un nombre de columna y el valor es a SORT_DESCo SORT_ASCes por eso que el código siguiente no funciona.

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

Manera correcta

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

Nota: Si una consulta ya especifica la cláusula orderBy, las nuevas instrucciones de pedido dadas por los usuarios finales (a través de la configuración de clasificación) se agregarán a la cláusula orderBy existente. Cualquier limitación existente y cláusulas de compensación serán sobrescritas por la solicitud de paginación de los usuarios finales (a través de la configuración de paginación).

Puede obtener información detallada de la Guía del proveedor de datos de Yii2

Ordenar pasando Ordenar objeto en la consulta

 $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
fuente
6

si tiene CRUD (índice) y necesita establecer la clasificación predeterminada de su controlador para GridView, ListView, o más ... Ejemplo

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

necesitas agregar

$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];
Andrey Matveev
fuente
2

Prueba este

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

$sort = $dataProvider->getSort();

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

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

puedes modificar el modelo de búsqueda como este

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