Scala Slick将表的功能扩展到其结构之外

Scala Slick将表的功能扩展到其结构之外,scala,playframework,slick,slick-3.0,Scala,Playframework,Slick,Slick 3.0,我使用Slick code gen输出一个非常普通的Tables.scala文件,该文件映射数据库结构的表/列 然而,我想在DAO中扩展这些表的功能,而事实证明这对我来说是不可能的(对于scala和play框架来说,基本上是新的) 内表。scala在班会内 您可以编写有权访问列的函数,例如 class Meeting(_tableTag: Tag) extends profile.api.Table[MeetingRow](_tableTag, "meeting") { def * = (i

我使用Slick code gen输出一个非常普通的Tables.scala文件,该文件映射数据库结构的表/列

然而,我想在DAO中扩展这些表的功能,而事实证明这对我来说是不可能的(对于scala和play框架来说,基本上是新的)

内表。scala在班会内 您可以编写有权访问列的函数,例如

  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”。在DAO的作用域中开会以完成此GetAttendeers函数。

如果我理解正确,您正在尝试连接两个表

Meeting2uzer.join(Meeting.on)(会议id====会议id)


您在Tables.scala中所做的工作将与在Slick中创建外键更为内联。您可以创建一个光滑的外键,而不是使用显式联接。请参阅有关Slick的文档。

谢谢,这正是我想要的。最后,我决定放弃Tables.scala自动生成的模型,将我的表结构分离到它们自己的可管理包中,并使用Tables.scala作为指导。这意味着我可以轻松地自定义它,而无需编写复杂的脚本
@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")