我有以下具有自连接关系的表-
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)