【问题标题】:Yii Sortable Column in CGridViewCGridView 中的 Yii 可排序列
【发布时间】:2013-06-20 07:21:00
【问题描述】:

我有一个计算的列,我想对其进行排序。 我有一个 get 方法...

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

【问题讨论】:

标签: sorting yii cgridview cactivedataprovider


【解决方案1】:

您是否尝试在CDbCriteriaselect 属性中指定自定义字段?

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

那时您不必声明 getCur_margin() 方法,而只需在模型中声明一个公共 $cur_margin 成员。所有需要的计算都将在 SQL 查询中完成。

您也可以参考this thread为例。

【讨论】:

  • 该列显示,但没有任何价值,仍然无法排序):
  • 原来我在错误的地方添加了选择。让我们回顾一下:gridvieww 中的标准、比较和列;成功了,非常感谢!
  • 你把选择放在哪里?
猜你喜欢
  • 2011-08-29
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多