2010-10-04 2 views
2

Je suis à une perte de la façon de créer une somme courante de champ particulier après avoir créé un critère dans un contrôleurGrails: somme de champ dans le constructeur de critères

Je crée actuellement un ensemble de jeu d'enregistrements à l'aide :

def b = Tapes.createCriteria() 
    def yesterday = b.list(sort: 'migratedDate', order: 'asc') { 
     between ("migratedDate", dat.minus(1), dat) 
    } 

et en comptant le nombre d'éléments dans ce jeu avec

def num2 = Tapes.countByMigratedDateBetween(dat.minus(1), dat) 

l'un des domaines dans mon domaine est « migratedDuration », le système retourne l'exécution du proce ss en millisecondes. Y a-t-il un moyen dans le contrôleur de créer une somme de ce nombre? Ou devrais-je le faire via javascript dans le fichier .gsp correspondant?

Merci encore,

une entaille terrible terrible

Cela a fonctionné parfaitement, grâce

def todayTime = aa.list() { 
    between ("migratedDate", dat.minus(4), dat.minus(3)) 
    projections { sum('migratedDuration') 
    } 
} 

Répondre

4

Vous pouvez utiliser une projection pour cela:

def b = Tapes.createCriteria() 
def yesterday = b.list() { 
    projections { 
     sum('migratedDuration') 
    } 
} 

Une liste de disponibles Les projections peuvent être trouvées here.

0

Est-ce vraiment une «somme cumulée», c'est-à-dire qu'elle s'incrémente sur chaque ligne ou avez-vous besoin de la somme sur toutes les lignes?

Une somme sur toutes les lignes peut être faite avec une projection (lire le doco pour la fermeture "projections" fournie par CriteriaBuider).

S'il s'agit d'un total cumulé, vous devez le faire dans le contrôleur ou vous visualiser lorsque vous parcourez les lignes de la liste de résultats.

acclamations

Lee

+0

Merci! ci-après fait le tour: def todayTime = aa.list() { \t \t \t entre ("migratedDate", dat.minus (4), dat.minus (3)) \t \t \t projections { \t \t \t \t sum ('migratedDuration') \t \t \t \t \t} – awfulHack

Questions connexes