我再次提出一个问题,我觉得解决方案很简单。无论如何应该简单。我一直在尝试为我的数据库建模我的映射,具有漂亮的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 */)
我已经知道我可以通过Box
,post.author.obj
或其他方式获得它。它不太合适,我必须对它进行match
等等吗?
我觉得答案很简单,但我却没有看到它。
答案 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")