2013-07-03 7 views
2

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

 $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 sorting with 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', 
    ), 
), 

Помощь?):

ответ

2

Оказывается в отличие от того, что упоминалось в вопросе, который я следовал, Yii принимает параметр attributes как массив значений, а не массив с одним значением 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) 
),