2014-09-27 3 views
1

В моем ClistView я пытаюсь установить сортировку по умолчанию и определить мои сортируемые атрибуты в моем представлении. Я получил это далекоdefault sort и sortableattributes для CListView

в моем actionIndex()

$criteria=new CDbCriteria(array(     
          'condition'=>'make_code!="00"', 
        )); 

$dataProvider=new CActiveDataProvider('StoreNew', array(
        'criteria'=>$criteria, 
        'sort'=>array(
         'defaultOrder'=>'_make DESC', 
         'attributes'=>array(
          '_make'=>array(
           'asc'=>'_make', 
           'desc'=>'_make DESC', 
          ), 
          '*', //if attributes contains a star ('*') element, the name will also be used to match against all model attributes. 
         ) 
        ), 
     )); 

в моей модели

public function relations() 
    { 
     return array(
      '_state' => array(self::BELONGS_TO, 'State', 'state'), 
      '_make' => array(self::BELONGS_TO, 'pMake', '', 
          'foreignKey' => array('make_code'=>'make_code')), 
     ); 
    } 

и на мой взгляд

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_view', 
    'sortableAttributes'=>array(
     '_make' => 'Make', 
     'store', 
     'state', 
    ), 
)); 

им получать эту ошибку

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column '_make' in 'order clause'. The SQL statement executed was: SELECT * FROM `store_new` `t` WHERE make_code!="00" ORDER BY _make DESC LIMIT 10 

как я сортирую таблицу pMake.make?

+0

Вы уверены, что ваша таблица 'store_new' содержит столбец' _make'? – MH2K9

+0

имя столбца 'make', я использовал' _make', поэтому я не смущаюсь при вызове его в представлении. который я называю подобным '$ data -> _ make-> make', это неправильно? – user2636556

+0

btw '$ data -> _ make-> make' работает отлично, на мой взгляд – user2636556

ответ

1

попробовать это в actionIndex()

$criteria=new CDbCriteria(array(     
           'with' => array('_make'), // join the _make relation you defined in your model into this query 
           'condition'=>'t.make_code!="00"', 
         )); 

затем

$dataProvider=new CActiveDataProvider('StoreNew', array(
        'criteria'=>$criteria, 
        'sort'=>array(
         'attributes'=>array(
          'make'=>array(
           'asc'=>'_make.make', 
           'desc'=>'_make.make DESC', 
          ), 
          '*', //if attributes contains a star ('*') element, the name will also be used to match against all model attributes. 
         ) 
        ), 
     )); 

затем на ваш взгляд

'sortableAttributes'=>array(
    'make' => 'Make', //you can call "make" base on 'attributes'=>array('make'=>array()) 
    'store', 
    'state', 
), 

примечание испытания. надеюсь, что это работает.

Смежные вопросы