为连接表创建一个新案例 class 是否很常见?

Is it common to create a new case class for join tables?

我有 2 个 table 喜欢:

users
id
name

lists
-id
-name

user_lists
id
list_id
user_id

所以我目前有一个查询 returns:

def getUsersByList(int listId): Future[Seq[UserList]] = {
  db.run( userLists.filter(f => f.listId === listId) )
}

现在我需要加入用户 table 以获取用户字段。

我 return 有什么选择?我想我必须创建一个新案例 class 并以某种方式映射到字段?

我认为您的问题(虽然也许我错了)实际上并不仅仅指案例 class,而是案例 class(又名 unpacked type)和 table 映射(又名 mixed type)。同样重要的是要了解 Slick 不会以任何方式帮助您处理一对多/多对多关系(它不是 ORM)。这里还有一点:

长话短说 - 您的加入 table 和其他加入一样 table。一般直截了当的答案是:。只需再创建一个 case classtable definition

您肯定需要您的联接 table 定义(简而言之 - 这个 class 继承自 Slicks Table 类型 - mixed type)。否则您将无法生成适当的查询。您可能会放弃创建 case class - 但我不确定是否值得这样做 - 毕竟这是一个额外的行,对吧? ( case class UserList(id: Id, listId: Id, userId: Id) - 或类似的东西)。

也许值得一提的是,您还可以通过在数据库级别创建视图来摆脱上述所有情况。