情况: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)我需要过滤(按整数)
答案 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' ),
);
然后在您的视图中将其用作普通属性/关系