我有这个代码,这是显示所有的每日退订用户。
public function getdailyUnSubs($modelName,$op){
$currentDate = date('Ymd');
$criteria = new CDbCriteria;
$criteria->select = 'app_unsubs,sms_unsubs';
$criteria->order = 'date DESC';
$criteria->limit = 1;
$criteria->offset = 0;
$Subscriber = $modelName::model()->find($criteria);
$totalunSubs = $Subscriber['app_unsubs']+$Subscriber['sms_unsubs'];
return $totalunSubs;
}
但现在我想得到所有未订阅的用户到目前为止。我想要的总和所有未订阅的用户。
这是我的代码,但它不工作.
public function getTotalUnSubs($modelName,$op){
$criteria = new CDbCriteria;
$criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs';
$Subscriber = $modelName::model()->find($criteria);
$totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs'];
return $totalunSubs;
}
这是说appunsubs
和smsunsubs
是没有定义的。
即使我将代码更改为$criteria->select ='(sum(app_unsubs)+ sum(sms_unsubs)) as totalunsubs';
和$totalunSubs = $Subscriber['totalunsubs'];
它仍然说totalunsubs
是未定义的。
3条答案
按热度按时间nkcskrwz1#
您没有定义
appunsubs
和smsunsubs
,因为在您的$modelName
模型类中没有类似的字段。要获取数据,您可以基于条件创建查询,并使用Yii::app()->db->createCommand($sql)->queryRow()
执行此查询。请查看以下代码:u0sqgete2#
我认为您必须在查询中设置Group By。
所以代码现在是这样的。
cbjzeqam3#
简单的解决方案是将公共或受保护的变量名作为sum添加到模型中。我建议将其作为“子模型”使用...
然后您可以在criteria中自由使用count或sum,它们将作为变量出现在使用find、findAll等检索模型中。
结果为:(举例说明)
这些子模型非常适合保存函数、关系和其他内容,就好像类需要从Gii自动生成一样,您只需要将extends CActiveRecord替换为extends SubmodelName...
此外,在这些年里,我开发了Base(模型),设置了我通常需要的一切(登录用户的user_id,检查日期的格式是否正确,等等)