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

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


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' => [...

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

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

2

Prueba este

$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

puedes modificar el modelo de búsqueda como este

$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]]
                                ]); 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.