如何使用可选外键查询 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
)。
我在 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
)。