iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
1

接下來我們來談談怎麼用 exposed DAO 處理資料之間的關係。

今天,先來談談一對多關係。

一對多關係

假設我們再多一個資料表 Users

object Users : IntIdTable() {
    val name = varchar("name", 50).index()
    val city = reference("city", Cities)
}

class User(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<User>(Users)

    var name by Users.name
    var city by City referencedOn Users.city
}

City 類別則要加上 referrersOn

class City(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<City>(Cities)

    var name by Cities.name
    val users by User referrersOn Users.city
}

利用 reference() 函式和 referrersOn,我們可以讓 Users 和之前的 Cities 相互綁定。

要建立資料時,我們可以這樣做:

val stPete = City.new {
    name = "St. Petersburg"
}

val munich = City.new {
    name = "Munich"
}

User.new {
    name = "Alice"
    city = stPete
}

User.new {
    name = "Bob"
    city = munich
}

println("Users in St. Petersburg: ${stPete.users.joinToString {it.name}}")

上一篇
[Day 17] 存取資料庫的另一種方式,談 exposed DSL
下一篇
[Day 19] 談談 n+1 問題和 eager loading
系列文
最好用的非同步網頁框架!開始用 Ktor 寫 Kotlin Server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言