Clasificación predeterminada del proveedor de datos Yii2

3 minutos de lectura

avatar de usuario
Sarvar norte

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

avatar de usuario
Alex

Creo que hay una solución adecuada. Configurar el yii\data\Sort objeto:

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

Enlace de documento oficial

  • Esta solución funciona, pero la búsqueda en el índice no funciona ahora.

    – Roby Sottini

    16 de noviembre de 2017 a las 12:14

O

              $proveedordedatos->setSort([
        'defaultOrder' => ['topic_order'=>SORT_DESC]'atributos' => [...

  • It’s more compatible with default GII output

    – userlond

    May 11, 2015 at 5:39

user avatar
Parth Chavda

defaultOrder contain a array where key is a column name and value is a SORT_DESC or SORT_ASC that’s why below code not working.

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

forma 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 proporcionadas por los usuarios finales (a través de la configuración de clasificación) se agregarán a la cláusula orderBy existente. Las cláusulas de límite y compensación existentes se sobrescribirán con la solicitud de paginación de los usuarios finales (a través de la configuración de paginación).

Puedes detallar aprender de
Guía Yii2 de proveedor de datos

Clasificación Al pasar el objeto Ordenar 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();

si tiene CRUD (índice) y necesita configurar 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];

Prueba con este

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

$sort = $dataProvider->getSort();

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

$dataProvider->setSort($sort);

avatar de usuario
johannchopin

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

avatar de usuario
Pather

Como se indica en el guíadebe especificar los comportamientos de clasificación de un proveedor de datos configurando sus propiedades de clasificación que corresponden a las configuraciones para yii\data\Sort

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

  • Respuesta duplicada. La respuesta stackoverflow.com/a/22994046/1030070 que es de 2014 ya tiene el mismo código y se marcó como la respuesta correcta.

    – Néstor

    18 de julio a las 17:49

¿Ha sido útil esta solución?