0
我在Slick(2.1)中有一個簡單的查詢,它在一對多關係中連接兩個表。大致定義如下:Slick.io - 處理連接表
class Users(tag: Tag) extends Table[ User ](tag, "users")
// each field here...
def * = (id, name).shaped <> (User.tupled, User.unapply)
class Items(tag: Tag) extends Table[ Item ](tag, "items")
// each field here...
// foreign key to Users table
def userId = column[ Int ]("user_id")
def user_fk = foreignKey("users_fk", userId, Users)(_.id)
def * = (id, userId.?, description).shaped <> (Item.tupled, Item.unapply)
單個用戶可以有多個項目。用戶案例類我想元帥的樣子......
case class User(id: Option[Int] = None, name:String, items:Option[List[Item]] = None)
我再查詢與隱式數據庫連接這樣的...
for{
u <- Users
i <- Items
if i.userId === u.id
} yield(u, i)
這種「運行」罰款。但是,查詢明顯複製了「用戶」記錄屬於用戶給予每個「項目」 ...
List(
(User(Some(1),"User1Name"),Item(Some(1),Some(1),"Item Description 1")),
(User(Some(1),"User1Name"),Item(Some(2),Some(1),"Item Description 2")))
是否有拉「一對多」部分進入用戶案例類的優雅的方式?無論是Slick還是Scala。我最終想要結束的是...
User(Some(1),"User1Name",
List(Item(Some(1),Some(1),"Item Description 1"),
Item(Some(2),Some(1),"Item Description 2")))
謝謝!