我有一个grails域,如下所示
User {
sortedSet notifications
static hasMany=[notifications:Notification]
}
Notification {
Date dateCreated
int status=0
static belongsTo=[user:User]
@Override
public int compareTo(obj) {
dateCreated.compareTo(obj.dateCreated)
}
}
如果我将“用户”对象返回给GSP,是否有办法获取status = 1的所有通知的计数。
例如:user.notifications.size()(但其中status = 1)
无需返回另一个单独的通知对象。
答案 0 :(得分:1)
你提到"瞬态"在标题中,但没有其他地方。你想声明一个瞬态属性来做这样的事情吗?...
class User {
SortedSet notifications
static hasMany=[notifications:Notification]
static transients = ['numberOfStatusOnes']
int getNumberOfStatusOnes() {
notifications?.count { it.status == 1 } ?: 0
}
}
答案 1 :(得分:0)
你可以使用namedQueries
或类似的:
class User {
static hasMany=[notifications:Notification]
static namedQueries = {
notificationsByStatus{ int status = 1 ->
notifications{
eq 'status', status
}
}
}
}
你可以调用这个查询
User.notificationsByStatus.count()
答案 2 :(得分:0)
如果我将“用户”对象返回给GSP,有没有办法获得 status = 1
的所有通知的计数
由于您要将User
返回给GSP,我假设您需要该对象并构建一个仅返回状态1通知的其他查询,这不是您想要的。相反,您可以查询User
并获取所需信息。
在正在重新审阅用户对象的控制器中,您可以执行以下操作:
def someAction() {
User u = // you got your user from somewhere:
int numberOfStatusOnes = u.notifications.count { it.status == 1 }
[user: u, numberOfStatusOnes: numberOfStatusOnes]
}
然后在您的GSP中引用user
作为User
类的实例,并在您引用numberOfStatusOnes
时,这将是一个表示多少Notification
的数字User
1}} status
的{{1}}为1。