如何使用可选外键查询 Slick 以 return 所有有关系和无关系的记录?

How to query Slick with an optional foreign key to return all records with and without relationship?

我在 Event 上定义了一个可选的外键,它转到 EventType。我想查询所有事件,甚至是那些具有 None (null) 事件类型的事件。这是在 Event 上定义的外键。

def eventTypeId = column[Option[Long]]("event_type_id")
def eventType = foreignKey("event_type", eventTypeId, EventTypes.eventTypes)(_.id)

我的初始查询如下,但它仅 returns 那些确实设置了外键的记录,因为外键是可选的。怎么样?

(for {
   p <- events
   e <- p.eventType
} yield (p, e))

我希望看到所有带有 AND 且未设置外键的事件。

听起来您要求的是 Slick 在这种情况下生成外部连接。我知道您已将此标记为 Slick 2 问题,但是 Slick 3.2 将进行增强:https://github.com/slick/slick/issues/179

同时,您可以自行管理加入。例如:

events.leftJoin(eventTypes).on(_.eventTypeId === _.id).
map { case (e, et) => (e, et.name.?) }

... 最终会给你 Seq[(Event, Option[String])] 的结果(或类似的,假设你有一个 name 那是 String)。