如何使用'count'列对CgridView进行排序

时间:2012-10-15 11:39:29

标签: php yii

情况:CausalType 1 - > N因果

进入causaltype的管理视图,我正在使用cgridview,我必须显示每个因果类型的causala数。

我将关系设置为CausalType

return array(
                        "causals" => array (self::HAS_MANY, "Causal", "causalTypeId"  ), 
                );

我添加了类变量

  public $activeCausalCount; 

这是管理视图中的列

 array (
                  'name' => 'activeCausalCount',
                  'value' => 'count($data->causals)',    
            ), 

实际上这是我在search()

中的标准
    $criteria=new CDbCriteria;

$criteria->compare('id',$this->id,true);
$criteria->compare('name',$this->name,true);
$criteria->compare('isActive',$this->isActive);

每种类型的因果关系都是正确的,但我有一些问题

1)我只需计算主动因果关系(计算causals.isActive = 1的因果关系)

2)我需要对列进行排序

3)我需要过滤(按整数)

2 个答案:

答案 0 :(得分:2)

如果你真的需要对COUNT进行排序和过滤,那么这可能是一个很小的过程。

一种方式是......

在CausalType表中添加一列(称之为activeCausals

CausalType模型

中定义关系
"totalActiveCasuals" => array(
      self::STAT, 
      "Causal", 
      "causalTypeId", 
      'condition'=>'totalActiveCasuals.isActive=1'
), 

并在因果

中定义afterSave方法
protected function afterSave() 
{
    $this->causaltype->activeCausals = $this->causaltype->totalActiveCasuals;
    $this->causaltype->save();

    return parent::afterSave();
}

现在您可以非常轻松地过滤,对新列activeCausals进行排序。

答案 1 :(得分:0)

为您的类型为STAT的CasualType添加一个新关系,如下所示:

return array(
   "casuals" => array (self::HAS_MANY, "Causal", "causalTypeId"  ), 
   "totalCasuals" => array (self::STAT, "Causal", "causalTypeId"  ), 
   "totalActiveCasuals" => array (self::STAT, "Causal", "causalTypeId", 'condition' => 'active = true'    ), 
);

然后在您的视图中将其用作普通属性/关系