2017-11-18 191 views
0

我使用Slick代碼gen來輸出非常正常的Tables.scala文件,該文件映射了我的數據庫結構的表/列。Scala Slick擴展了其結構外的表的功能

但是我想告訴我的DAO及其證明這些表的功能是不可能的,我(約新Scala和發揮框架)

INSIDE Tables.scala在類會議 你可以寫可訪問列的功能IE

class Meeting(_tableTag: Tag) extends profile.api.Table[MeetingRow](_tableTag, "meeting") { 
def * = (id, dateandtime, endtime, organisationid, details, adminid, datecreated, title, agenda, meetingroom) <> (MeetingRow.tupled, MeetingRow.unapply) 
def ? = (Rep.Some(id), Rep.Some(dateandtime), Rep.Some(endtime), Rep.Some(organisationid), Rep.Some(details), Rep.Some(adminid), Rep.Some(datecreated), Rep.Some(title), Rep.Some(agenda), Rep.Some(meetingroom)).shaped.<>({r=>import r._; _1.map(_=> MeetingRow.tupled((_1.get, _2.get, _3.get, _4.get, _5.get, _6.get, _7.get, _8.get, _9.get, _10.get)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported.")) 
val id: Rep[Int] = column[Int]("id", O.AutoInc, O.PrimaryKey) 
val dateandtime: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]("dateandtime") 
val endtime: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]("endtime") 
val organisationid: Rep[Int] = column[Int]("organisationid") 
val details: Rep[String] = column[String]("details", O.Default("")) 
val adminid: Rep[Int] = column[Int]("adminid") 
val datecreated: Rep[java.sql.Timestamp] = column[java.sql.Timestamp]("datecreated") 
val title: Rep[String] = column[String]("title", O.Default("")) 
val agenda: Rep[String] = column[String]("agenda", O.Default("")) 
val meetingroom: Rep[Int] = column[Int]("meetingroom") 

def getAttendees = Tables.Meeting2uzer.filter(_.meetingid === id) 

其中上述函數中的「ID」是Meeting中的列。

現在問題出現了,當我想在我的DAO中寫入相同的函數「getAttendees」時,它無法訪問範圍中的列。

東西線沿線的....

@Singleton 
class SlickMeetingDAO @Inject()(db: Database)(implicit ec: ExecutionContext) extends MeetingDAO with Tables { 

    override val profile: JdbcProfile = _root_.slick.jdbc.PostgresProfile 
    import profile.api._ 

    private val queryById = Compiled((id: Rep[Int]) => Meeting.filter(_.id === id)) 

    def getAttendees = Meeting2uzer.filter(_.meetingid === "NEED ID OF COLUMN IN SCOPE") 

如何獲得「身份證」,這是在Tables.Meeting列在範圍上吾道完成這個getAttendees功能。

回答

1

如果我理解正確,你想加入兩個表?

Meeting2uzer.join(Meeting).on(_.meetingid === _.id)

你的Tables.scala裏面做什麼,會更內嵌創造油滑的外鍵。您可以創建一個光滑的外鍵,而不是使用顯式連接。請參閱Slick here的文檔。

+0

謝謝,這正是我想要的。最後,儘管我決定退出Tables.scala自動生成的模型,只是將我的表結構分離到它們自己可管理的包中,並使用Tables.scala作爲指導。意味着我可以輕鬆地定製它,而無需編寫複雜的腳本 –