OneToMany与Lift的关系

时间:2010-12-21 03:00:25

标签: scala relational-database lift

我再次提出一个问题,我觉得解决方案很简单。无论如何应该简单。我一直在尝试为我的数据库建模我的映射,具有漂亮的OneToMany特性,就像这样

class User extends MegaProtoUser[User] with OneToMany[Long, User] {
  def getSingleton = User

  object posts extends MappedOneToMany(Post, Post.author, OrderBy(Post.edited, Descending))
}

class Post extends LongKeyedMapper[Post] with IdPK with OneToMany[Long, Post] {
  def getSingleton = Post

  object author extends LongMappedMapper(this, User)

  object title extends MappedString(this, 100) {
    override def dbIndexed_? = true

    override def defaultValue = "New Post"
  }

  object contents extends MappedText(this)

  object edited extends MappedDate(this)
}

一切都很好,我有一对多的关系。但是,真正困扰我的是什么,我如何获取该关系中的数据?假设我有一个Post对象,想要得到作者的名字?

bind("post", in, "title" -> post.title, "author" -> /* insert overly complicated method here */)

我已经知道我可以通过Boxpost.author.obj或其他方式获得它。它不太合适,我必须对它进行match等等吗?

我觉得答案很简单,但我却没有看到它。

2 个答案:

答案 0 :(得分:4)

Mapper不保证post.author始终可以成功,因此必须返回Box。您可以使用post.author.obj.map(_.name.is) openOr "unknown name"或类似内容来避免使用match语句。

或者,您可以在Post上创建一个帮助方法,它执行默认处理并使用它。

答案 1 :(得分:3)

post.author.obj.map(_.userNameOrSomething).openOr("Unknown writer")