【问题标题】:How to query Slick with an optional foreign key to return all records with and without relationship?如何使用可选外键查询 Slick 以返回所有有和没有关系的记录?
【发布时间】:2015-05-14 10:46:50
【问题描述】:

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

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

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

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

我希望看到所有带有 AND 而没有外键集的事件。

【问题讨论】:

    标签: slick slick-2.0 play-slick


    【解决方案1】:

    听起来您的要求是让 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)。

    【讨论】:

    • 应该更容易支持非必需的外键。不过你给我的东西很有效,所以我暂时先接受它,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多