2016-05-30 2 views
0

ich diesen Code haben, die alle täglich abmelden Benutzer zeigt ..Wie man SUM in cdbCriteria in yii benutzt?

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; 
} 

aber jetzt möchte ich bisher alle unsubscribed Benutzer erhalten. Ich möchte die Summe aller nicht abonnierten Benutzer.

Hier ist mein Code, aber es funktioniert nicht.

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; 
} 

Es sagt appunsubs und smsunsubs nicht definiert ist.

Auch wenn ich den Code zu

$criteria->select ='(sum(app_unsubs)+ sum(sms_unsubs)) as totalunsubs';

und

$totalunSubs = $Subscriber['totalunsubs'];

Es ändern sagt noch totalunsubs nicht definiert ist.

Antwort

2

Sie haben appunsubs und smsunsubs nicht definiert, da es in Ihrer Modellklasse $modelName keine Felder gibt. Um Daten abzurufen, können Sie Abfragen basierend auf Kriterien erstellen und diese Abfrage mit Yii::app()->db->createCommand($sql)->queryRow() ausführen. Schauen Sie sich diesen Code:

public function getTotalUnSubs($modelName,$op) 
{ 
    $criteria = new CDbCriteria; 
    $criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs'; 

    //creating proper SQL 
    $sql = Yii::app()->db->commandBuilder->createFindCommand($modelName, $criteria)->getText(); 

    //fetching data based on created SQL stored in $sql variable 
    $Subscriber = Yii::app()->db->createCommand($sql)->queryRow(); 

    $totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs']; 

    return $totalunSubs; 
} 
+0

Nach der Verwendung Ihres Codes gibt es mir einen Fehler und sagen "SubUsers" doesnot existiert nicht. Es ist der Name meiner Tabelle. Der Fehler ist auf $ sql = Yii :: app() -> db-> commandBuilder-> createFindCommand ($ modelName, $ Kriterien) -> getText(); ' –

+0

Versuchen Sie zu überprüfen, was mit diesem Code zurückgegeben:' Yii: : app() -> db-> getSchema() -> getTable ('SubUsers') '. Wenn das 'CDbTableSchema'-Objekt zurückgegeben wird, übergeben Sie es an die Zeile, in der sich ein Fehler anstelle der Variablen' $ modelName' befindet. – aslawin

+0

Wohin soll ich diesen Code schreiben? 'Yii :: app() -> db-> getSchema() -> getTable ('SubUsers')' –

1

Ich glaube, Sie Gruppe von in Ihre Abfrage zu setzen haben.

So Code ist jetzt wie folgt.

public function getTotalUnSubs($modelName,$op){ 


    $criteria = new CDbCriteria; 
    $criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs'; 
    $criteria->group='table primary key'; 

    $Subscriber = $modelName::model()->find($criteria); 

    $totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs']; 

    return $totalunSubs; 
} 
+0

Meine Tabelle hat keinen Primärschlüssel. es braucht es nicht –