1

情况:CausalType 1 -> N Causal

进入 causaltype 的管理视图,我使用的是 cgridview,我必须显示每个 causalType 的 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)我只需要计算 ACTIVE 因果关系(计算 causals.isActive = 1 的因果关系)

2)我需要对列进行排序

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

4

2 回答 2

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现在您可以非常轻松地过滤、排序新列。

于 2012-10-15T14:20:01.200 回答
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'    ), 
);

然后在您看来,只需将其用作普通属性/关系

于 2012-10-15T13:52:08.060 回答