2013-06-20 3 views
0

У меня есть расчетная колонка, которую я хочу сортировать. У меня есть метод получить за это ...Yii Sortable Column in CGridView

public function getCur_margin() { 
     return number_format(($this->store_cost/$this->store_price)/$this->store_cost * 100, 2) . '%'; 
    } 

И я последовал за эту тему ...

CGridview custom field sortable

Но теперь он ищет фактический столбец в базе данных. Как я могу получить поле, используя <calculations> AS cur_margin только временно для этого CActiveDataProvider?

Вот код контроллера для поставщика:

$dataProvider = new CActiveDataProvider('Products', array(
    'criteria' => array(
     'condition' => 'store_id IN (SELECT `id` FROM `stores` WHERE `user_id` = ' . Yii::app()->user->id . ')', 
    ), 
    'pagination' => array(
     'pageSize' => 15, 
    ), 
    'sort'=>array(
     'attributes'=>array(
      'cur_margin' => array(
       'asc' => 'cur_margin ASC', 
       'desc' => 'cur_margin DESC', 
      ), 
     ), 
    ), 
)); 
+0

Это может помочь: http://www.mrsoundless.com/php/yii/searching-and-sorting-a-column-from-a-related-table-in-a-cgridview/ – MrSoundless

ответ

3

Вы пытались определить ваш настраиваемое поле в select свойстве CDbCriteria?

'select' => array(
    ..., // fields to select 
    '(<calculations>) AS cur_margin' 
) 

Вы не должны объявить метод getCur_margin() тогда, но только объявить открытый $cur_margin элемент в вашей модели. Все необходимые вычисления будут выполнены в SQL-запросе.

В качестве примера вы также можете обратиться к this thread.

+0

Я пробовал, но он ничего не делает – casraf

+0

Столбец показывает, но он не имеет значения, и он все еще не сортируется): – casraf

+0

Оказывается, я добавлял выбор не в том месте. Итак, давайте напомним: критерии, сравнение и столбец в gridvieww; это сработало, спасибо вам большое! – casraf