灵活查询一对可选的一对(零或一)关系

Slick query for one to optional one (zero or one) relationship

给定表:

case class Person(id: Int, name: String)
case class Dead(personId: Int)

并填充了:

Person(1, "George")
Person(2, "Barack")
Dead(1)

是否有可能像这样生成 (Person, Option[Dead]) 列表的单个查询?

(Person(1, "George"), Some(Dead(1)))
(Person(2, "Barack"), None)

对于 slick 3.0,它应该是这样的:

val query = for {
  (p, d) <- persons joinLeft deads on (_.id === _.personId)
} yield (p, d)

val results: Future[Seq[(Person, Option[Dead])]] = db.run(query.result)

在 slick 中,外连接会自动包装在 Option 类型中。您可以在此处阅读有关加入的更多信息:http://slick.typesafe.com/doc/3.0.0/queries.html#joining-and-zipping