Das Szenario ähnelt der Frage bei How to better parse the same table twice with Anorm?, aber die beschriebenen Lösungen zu dieser Frage können nicht mehr verwendet werden.In Anorm ist es möglich, mehrere ColumnAliaser auf die gleiche Anfrage anzuwenden
In dem Szenario, in dem eine Nachricht 2 Benutzer hat, muss ich die from_user und to_user mit SQL-Joins analysieren.
case class User(id: Long, name: String)
case class Message(id: Long, body: String, to: User, from: User)
def userParser(alias: String): RowParser[User] = {
get[Long](alias + "_id") ~ get[String](alias + "_name") map {
case id~name => User(id, name)
}
}
val parser: RowParser[Message] = {
userParser("from_user") ~
userParser("to_user") ~
get[Long]("messages.id") ~
get[String]("messages.name") map {
case from~to~id~body => Message(id, body, to, from)
}
}
// More alias here possible ?
val aliaser: ColumnAliaser = ColumnAliaser.withPattern((0 to 2).toSet, "from_user.")
SQL"""
SELECT from_user.* , to_user.*, message.* FROM MESSAGE
JOIN USER from_user on from_user.id = message_from_user_id
JOIN USER to_user on to_user.id = message.to_user
"""
.asTry(parser, aliaser)
Bitte genau die Frage: Ich denke, die Frage ist nicht, ob eine 'ColumnAliaser' Instanz wiederverwendet werden kann (wie es kann offensichtlich als unveränderlich), aber ist es möglich, mehr' ColumnAliaser' auf die gleiche Abfrage anwenden – cchantep