如何编写查询来使用CDbCriteria计算yii中的外键?

时间:2014-06-13 19:44:20

标签: php mysql activerecord yii

我的表Ads包含列AdsIdClientId和表Assigned。已分配有AdsId作为外键。我想计算给定AdsId的已分配ClientId的数量。我有以下查询,但我不确定它是否是最佳方式。如何在yii中运行相同的查询?希望我明白我的问题。

SELECT A. * , (
SELECT COUNT( B.AdsId ) 
FROM Assigned AS B
WHERE B.AdsId = A.AdsId
AND A.ClientId =1
)
FROM Ads AS A
WHERE A.ClientId =1
LIMIT 0 , 30

1 个答案:

答案 0 :(得分:0)

首先在模型关系函数中声明一个关系

public function relations(){
     return array(
        ...
       'AdsIdCount'=> array(self::STAT,'Ads','AdsId'),
       //'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)

     );
}

然后在您返回的activeRecord结果中,您可以像这样调用此计数

$result = Assigned::model()->find($criteria); 

$result->adsIdCount ; // do logic here

$results = Assigned::model()->findAll($criteria); 
foreach ($results as $result){
    $result->adsIdCount ; // do logic here
}

请参阅STAT关系,了解有关其工作原理http://www.yiiframework.com/doc/guide/1.1/en/database.arr#statistical-query

的详细信息