Сортировка CSqlDataProvider в Yii

У меня довольно сложный запрос, я использую CSqlDataProvider с:

        $sql = "
          SELECT  c.id AS id,
                  c.enabled AS enabled,
                  s.store_name AS store_name,
                  s.store_url AS store_url,
                  c.verified AS verified,
                  r.rating_total AS rating
          FROM compete_settings c
          LEFT JOIN stores s
            ON c.compete_id = s.id
          LEFT JOIN (
            (SELECT store_id, rating_total FROM amazon_sellers)
            UNION
            (SELECT store_id, rating_total FROM ebay_sellers)
          ) AS r
            ON c.compete_id = r.store_id
          WHERE c.store_id = :store_id
        ";
        $itemCount = Yii::app()->db->createCommand("SELECT COUNT(id) FROM compete_settings WHERE store_id = $store_id")->queryScalar();
        return new CSqlDataProvider($sql, array(
            'totalItemCount' => $itemCount,
            'params' => array(
                'store_id' => $store_id,
            ),
            'sort' => array(
                'attributes' => array ( 'enabled, store_name, rating' ),
                'defaultOrder' => array('store_name'=>false)
            ),
            'pagination' => array('pageSize' => Yii::app()->user->getState('pageSize_cs', Yii::app()->params['defaultPageSize']),),
        ));

Запрос отлично работает. Однако столбцы не сортируются.

Я позаботился о сортировке Yii CGridview с помощью CSqlDataProvider, но они все еще не являются кликабельными заголовками столбцов.

Вот мои массивы столбцов:

'columns' => array(
    array(
        'header' => 'Enabled',
        'type'=>'raw',
        'name'=>'enabled',
        'htmlOptions'=>array('class'=>'enabled-column'),
        'value' => 'CHtml::checkbox("", $data["enabled"], array("id"=>"c{$data[\'id\']}", "class"=>"enable-switch"))',
    ),
    array(
        'header' => 'Name',
        'htmlOptions' => array('class' => 'account-name-column'),
        'type' => 'raw',
        'name'=>'store_name',
    ),
    array(
        'header' => 'Store Rating',
        'name'=>'rating',
    ),
),

Помогите?):

1 ответ

Решение

Оказывается, в отличие от того, что было упомянуто в вопросе, которому я следовал, Yii принимает attributes param как массив значений, а не массив с одним значением CSV.

Так:

'sort' => array(
    'attributes' => array ( 'enabled', 'store_name', 'rating' ),
    'defaultOrder' => array('store_name'=>false)
),

И не:

'sort' => array(
    'attributes' => array ( 'enabled, store_name, rating' ),
    'defaultOrder' => array('store_name'=>false)
),
Другие вопросы по тегам