我有以下用于通过网络应用发送内部消息的代码:
域:
class Mail {
...
User from
static hasMany = [to: User]
...
}
我想要做的是启用登录并在“收件人”字段中寻址的用户查看发送给他们的所有邮件。使用以下方法使用“from”字段可以轻松完成此操作:
def totalMails = Mail.countByFrom(user)
...
def mails = Mail.findAllByFrom(user, [max: rows, offset: offset])
使用“to”字段执行此操作更加困难,我不确定如何执行此操作并快速查找。
答案 0 :(得分:1)
您可以使用条件,位置或HQL查询。 HQL查询将让您了解条件和查询在数据库级别的工作方式。
def totalMails = Mail.createCriteria().get {
to {
eq('id', user.id)
}
projections {
count('id')
}
}
def mails = Mail.createCriteria().list(max: rows, offset: offset) {
to {
eq('id', user.id)
}
}
def totalMails = Mail.where {
to.id == user.id
}.count()
def mails = Mail.where {
to.id == user.id
}.list(max: rows, offset: offset)
def totalMails = Mail.executeQuery 'select count(m) from Mail as m inner join m.to as t where t.id = :id', [id: user.id]
def mails = Mail.executeQuery 'select m from Mail as m inner join m.to as t where t.id = :id', [id: user.id], [max: rows, offset: offset]