如何基于外键关系添加列

时间:2020-07-28 09:35:57

标签: scala slick

我有以下具有自连接关系的表-

tagTable
--------------------
id   name  parentId
--------------------
1    ptag  null
2    ctag  ptag

从db读取数据时,我想添加一个名为parentTagName的列,所以我想要类似-

的结果
tagTable
------------------------------------------
id   name       parentId    parentTagName
------------------------------------------
1    ptag       null        null
2    ctag       1           ptag 

在创建scala slick TableQuery时如何直接执行此操作?

 import db.DB
    import models.{ Tag => NccmTag }
    import slick.lifted.ForeignKeyQuery
    import utils._

    trait TagTable {
      this: DB =>

      import dbConfig.profile.api._

       protected class TagTableStructure(tag: Tag) extends Table[AppTag](tag, "app", "app_tag") {
       final val ID_COLUMN_NAME: String = "id"
       final val NAME_COLUMN_NAME: String = "name"
       final val PARENT_ID_COLUMN: String = "parent_id"

       def id: Rep[String] = column[String](ID_COLUMN_NAME, O.PrimaryKey)

       def name: Rep[String] = column[String](NAME_COLUMN_NAME, O.Unique)

       def parentId: Rep[Option[String]] = column[Option[String]](PARENT_ID_COLUMN, O.Default(None))

       def parentTagFk: ForeignKeyQuery[TagTableStructure, AppTag] = foreignKey("fk", parentId, tags)(_.id.?)
                         def parentTagFk: ForeignKeyQuery[TagTableStructure, AppTag] = foreignKey("fk", parentId, tags)(_.id.?)

      def * = (id, name, parentId) <> ({ data =>
      {
         new AppTag(data._1, data._2, data._3.map(pId => pId))
      }
      }, {
      r: AppTag =>
      {
          Some(r.id, r.name, r.parentId.map(_.toString))
      }
})

  }

  protected val tags = TableQuery[TagTableStructure]

}

case class AppTag(id: UUID, name: String, parentId: Option[UUID] = None)

0 个答案:

没有答案
相关问题