2017-11-18 7 views
0

私はSlick code-genを使用して、データベースの構造のテーブル/カラムをマップする非常に正常なTables.scalaファイルを出力しています。Scala Slickは構造外のテーブルの機能を拡張します

私は私のために不可能であることを私のDAOとその証明にそれらのテーブルの機能を拡張したいが(Scalaのプレイフレームワークとほぼ新)

INSIDE Tables.scala INSIDEあなたが書くことができ、クラス会 列IE

上記の機能では、「ID」は、会議の列である
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) 

へのアクセス権を持っている機能。

今、問題は、スコープ内の列にアクセスできない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") 

は、どのように私はこのgetAttendees機能を完了するために私のDAOでスコープにTables.Meetingの列である「ID」を入手できます。

答えて

1

正しく理解すれば、2つのテーブルを結合しようとしていますか?あなたはTables.scalaの内側に何をやったか

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

、スリックで外部キーを作成すると、よりインラインだろう。明示的な結合を使用する代わりに、滑らかな外部キーを作成することができます。 Slick hereのドキュメントを参照してください。

+0

ありがとう、これは私が欲しかったものです。最後に、私はTables.scalaの自動生成モデルを取り除き、自分のテーブル構造を独自の管理可能なパッケージに分けて、Tables.scalaをガイドとして使用することにしました。複雑なスクリプトを書くことなく簡単にカスタマイズすることができます –

関連する問題