2013-04-04 6 views
0

Disons que je veux avoir un fournisseur CActiveDataProvider pour un CGridView. Je dois mettre un SUM(invitesCount) AS invites dans un résultat de fournisseur. Comment le récupérer? Je suppose que je ne peux pas simplement utiliser $dataProvider->invites?Yii - utilisation du champ clause MySQL AS

Répondre

2

Vous devez spécifier les éléments suivants dans votre relationinvites

'invites '=>array(self::BELONGS_TO, 'CampaignFund', 'campaign_id', 'select' => 'SUM(invitesCount)'), 

et utiliser cette relation dans vos critères.

+0

Merci. Est-ce une bonne idée d'ajouter des révisions chaque fois que nous avons besoin d'un champ? Est-ce efficace? J'ai remarqué quelques secondes avant de lire votre réponse. Je peux juste définir de nouvelles propriétés publiques et faire la sélection avec le point AS sur ces propriétés. Vous ne savez pas quel est le meilleur? – Joe

1

Plusieurs autres options:

  1. Utilisez CStatRelation

    invitesCount=>array(self::STAT,'Invites','foreign_key_field'); 
    
  2. L'ajout d'une propriété publique peuvent travailler. Toutefois, le champ ne sera défini que si vous avez modifié la requête de recherche par défaut pour inclure cette nouvelle condition. Cela peut être fait en remplaçant defaultScope() ou en créant un nouveau scope et en l'utilisant chaque fois que invitesCount est requis.

  3. Une autre option consiste à créer une vue de base de données à partir de la requête requise et à créer un nouveau modèle à partir de cette vue de base de données.

+0

En fait, vous n'avez pas besoin de définir new 'scope'. Vous pouvez simplement changer la méthode 'search' pour accepter l'objet' CDbCriteria' en tant que paramètre avec la valeur par défaut 'null', puis fusionner les critères par défaut avec les critères du paramètre. – Joe