How to build find query with find by many-to-many reference?
I need to build find query but use many-to-many reference value as filter, but tables hasn't many-to-many references
Could you provide what your tables look like and what query would you like to write, so we could help you better?
Also, please check Join part of Wiki, full join syntax can help you.
Also, please check Join part of Wiki, full
joinsyntax can help you.
Hello, sorry for late answer, it's because I forgot about my project for some time. I need DAO syntax cuze I using referring to another entity.
Here is my tables & entities declarations:
object Servers : FlakeUUIDTable("servers") {
val name = text("name")
val description = text("description")
val link = text("link").nullable()
val privacy = enumeration<ServerPrivacy>("privacy").default(ServerPrivacy.PUBLIC)
val owner = reference("owner", Users)
}
class Server(id: EntityID<UUID>) : FlakeUUIDEntity(id, Servers) {
companion object : UUIDEntityClass<Server>(Servers)
var name by Servers.name
var description by Servers.description
var link by Servers.link
var privacy by Servers.privacy
var owner by User referencedOn Servers.owner
val categories by Category referrersOn Categories.server
var members by User via Members
}
object Users : FlakeUUIDTable("users") {
val login = text("login")
val password = text("password")
val username = text("username")
val link = text("link").nullable()
val locale = enumeration<LanguageRegion>("locale")
val flags = integer("flags").default(0)
val isBanned = bool("is_banned").default(false)
}
class User(id: EntityID<UUID>) : FlakeUUIDEntity(id, Users) {
companion object : UUIDEntityClass<User>(Users)
var login by Users.login
var password by Users.password
var username by Users.username
var link by Users.link
var locale by Users.locale
var flags by Users.flags
var isBanned by Users.isBanned
}
object Members : Table("members") {
val user = reference("user", Users)
val server = reference("server", Servers)
val joinedAt = timestamp("joined_at")
}
So I need to find all Servers that contains User (see members field)
val query = Servers.innerJoin(User).innerJoin(Member).
slice(Servers.columns).
selectAll().
withDistinct()
val servers = Server.wrapRows(query)
val query = Servers.innerJoin(User).innerJoin(Member). slice(Servers.columns). selectAll(). withDistinct() val servers = Server.wrapRows(query)
I little edited this code for me, now it looks so:
val query = (Servers innerJoin Members)
.slice(Servers.columns)
.selectAll()
.withDistinct()
Server.wrapRows(query).map { it.toObject() }