ktorm icon indicating copy to clipboard operation
ktorm copied to clipboard

How to use entities with many-to-many relations?

Open inesin1 opened this issue 2 years ago • 0 comments

I have a table Users(id, name, role) and another Departments(id, name). Each user can be in several departments and each department can have several users, so i create a table User_Departments(user_id, department_id). How can I declare a User entity having a list of departments? This is what it looks like now:

// Users
interface User : Entity<User> {
    companion object : Entity.Factory<User>()

    var id: Int
    var name: String
    var role: Role
}

object Users : Table<User>("Users") {
    val id = int("id").primaryKey().bindTo { it.id }
    val name = varchar("name").bindTo { it.name }
    val roleId = int("role_id").references(Roles) { it.role }

    val Database.users get() = database.sequenceOf(Users)
}

// Departments
interface Department : Entity<Department> {
    companion object : Entity.Factory<Department>()

    val id: Int
    var name: String
}

object Departments : Table<Department>("Departments") {
    val id = int("id").primaryKey().bindTo { it.id }
    val name = varchar("name").bindTo { it.name }

    val Database.departments get() = database.sequenceOf(Departments)
}

// UserDepartments
interface UserDepartment : Entity<UserDepartment> {
    companion object : Entity.Factory<UserDepartment>()

    var user: User
    var department: Department
}

object UserDepartments : Table<UserDepartment>("User_Departments") {
    val userId = int("user_id").references(Users) { it.user }
    val departmentId = int("department_id").references(Departments) { it.department }

    val Database.userDepartments get() = database.sequenceOf(UserDepartments)
}

inesin1 avatar Nov 22 '23 11:11 inesin1