为连接表创建一个新案例 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 class
和 table definition
。
您肯定需要您的联接 table 定义(简而言之 - 这个 class 继承自 Slick
s Table
类型 - mixed type
)。否则您将无法生成适当的查询。您可能会放弃创建 case class - 但我不确定是否值得这样做 - 毕竟这是一个额外的行,对吧? ( case class UserList(id: Id, listId: Id, userId: Id)
- 或类似的东西)。
也许值得一提的是,您还可以通过在数据库级别创建视图来摆脱上述所有情况。
我有 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 class
和 table definition
。
您肯定需要您的联接 table 定义(简而言之 - 这个 class 继承自 Slick
s Table
类型 - mixed type
)。否则您将无法生成适当的查询。您可能会放弃创建 case class - 但我不确定是否值得这样做 - 毕竟这是一个额外的行,对吧? ( case class UserList(id: Id, listId: Id, userId: Id)
- 或类似的东西)。
也许值得一提的是,您还可以通过在数据库级别创建视图来摆脱上述所有情况。