Grails findBy用外键查询

时间:2015-03-07 17:18:54

标签: grails groovy gorm

我尝试通过调用getProfiePicture()对象上的User方法从数据库中获取用户个人资料照片。

来自视图的

方法调用

<p>${user.getProfilePicture()}</p>

User.groovy 域类:

class Picture {

  User user
  String url
  boolean profile = false
  boolean verified = true

  static belongsTo = [user: User]

  static constraints = {
  }
}

Picture.groovy 域名类:

class User {

  static hasMany = [pictures: Picture]

  String uid = UUID.randomUUID().toString()
  String username
  String password

  String getProfilePicture() {
    log.debug("ID: " + id)
    log.debug("UID: " + uid)
    log.debug("Pictures: " + pictures)
    return Picture.findByUserIdAndProfile(id, true)
  }

}

图片表: enter image description here

问题

我在尝试获取个人资料照片时收到此错误:

Class
org.codehaus.groovy.grails.exceptions.InvalidPropertyException
Message
No property found for name [userId] for class [class foo.Picture]

我做错了什么?

我正在使用:

  • Grails 2.4.4

2 个答案:

答案 0 :(得分:1)

您可以按以下方式实施getProfilePicture

String getProfilePicture() {
    Picture.where { user == this && profile == true}.first().url
}

或者,您可以使用动态Finder(如注释中所示)。顺便说一句:Picture Class不需要创建两次用户属性。 static belongsTo = [user: User]就足够了。

答案 1 :(得分:1)

getProfilePicture()域类中的User方法应返回以下内容:

Picture.findByUserAndProfile(this, true)

您收到该错误的原因是您试图通过Picture找到userId个实例,该字段不存在。