He pedido similar question recently, and got a great reply para resolver un problema de relación de muchos a muchos con Lift Mapper. Miré el ScalaQuery/SLICK documentation pero no documenta un enfoque de datos persistentes donde están involucradas las tablas de enlaces. Si alguien sabe cómo hacer un mapeo de muchos a muchos usando SLICK, sería genial si puede compartirlo.¿Cómo puedo presentar una relación de muchos a muchos utilizando una tabla de enlaces con ScalaQuery o SLICK?
16
A
Respuesta
23
This test (creado por Stefan Zeiger) es nueva en el conjunto de pruebas pulido, y responde a la pregunta bastante bien:
def testManyToMany(): Unit = db withSession {
object A extends Table[(Int, String)]("a") {
def id = column[Int]("id", O.PrimaryKey)
def s = column[String]("s")
def * = id ~ s
def bs = AToB.filter(_.aId === id).flatMap(_.bFK)
}
object B extends Table[(Int, String)]("b") {
def id = column[Int]("id", O.PrimaryKey)
def s = column[String]("s")
def * = id ~ s
def as = AToB.filter(_.bId === id).flatMap(_.aFK)
}
object AToB extends Table[(Int, Int)]("a_to_b") {
def aId = column[Int]("a")
def bId = column[Int]("b")
def * = aId ~ bId
def aFK = foreignKey("a_fk", aId, A)(a => a.id)
def bFK = foreignKey("b_fk", bId, B)(b => b.id)
}
(A.ddl ++ B.ddl ++ AToB.ddl).create
A.insertAll(1 -> "a", 2 -> "b", 3 -> "c")
B.insertAll(1 -> "x", 2 -> "y", 3 -> "z")
AToB.insertAll(1 -> 1, 1 -> 2, 2 -> 2, 2 -> 3)
/*val q1 = for {
a <- A if a.id >= 2
aToB <- AToB if aToB.aId === a.id
b <- B if b.id === aToB.bId
} yield (a.s, b.s)*/
val q1 = for {
a <- A if a.id >= 2
b <- a.bs
} yield (a.s, b.s)
q1.foreach(x => println(" "+x))
assertEquals(Set(("b","y"), ("b","z")), q1.list.toSet)
}
Actualización:
No estoy muy seguro de lo que sería la mejor manera de integrar la lógica empresarial y la persistencia en Scala (ya que esto es más que OO o FP), por lo que I asked a new question about this. Espero que esto ayude a alguien más que también tenga curiosidad sobre este problema.
Cuestiones relacionadas
- 1. EntityFramework Misma tabla Muchos a muchos Relación
- 2. Relación de muchos a muchos
- 3. SQLAlchemy Relación muchos a muchos en una sola tabla
- 4. Cómo organizar una relación de muchos a muchos en MongoDB
- 5. Relación Muchos a Muchos
- 6. Cómo asignar la lista de muchos a muchos en Hibernate con una tabla de enlaces
- 7. Ejemplos de consultas en una relación muchos a muchos
- 8. Entity Framework - consultar una relación muchos-a-muchos tabla de relación
- 9. Actualizando en una relación de muchos a muchos
- 10. ¿Cómo eliminar en una relación de muchos a muchos?
- 11. relación muchos-a-muchos SQLite?
- 12. ¿Requiere MySQL una clave primaria para una tabla de enlaces de muchos a muchos?
- 13. Consultando una relación de muchos a muchos en SQLAlchemy
- 14. obteniendo datos de una relación muchos a muchos db
- 15. Búsqueda de artículos en una relación muchos a muchos
- 16. SQL: relación muchos a muchos, condición IN
- 17. ¿Cómo configuro una búsqueda de facetas con una relación de muchos a muchos usando Sunspot?
- 18. uno a muchos con una tabla
- 19. ¿Cómo configurar una relación uno a muchos?
- 20. Cómo configurar una relación de muchos a muchos utilizando el marco de la entidad con fluidez API
- 21. ¿Cómo puedo acceder a las propiedades de una tabla "a través" de muchos a muchos desde una plantilla django?
- 22. índice de esfinge con muchos-a-muchos relación
- 23. Valor máximo en una relación muchos a muchos
- 24. Buscar en la relación muchos a muchos con Doctrine2
- 25. Fluent-NHibernate: Cómo crear una relación de muchos a muchos con un único contraint
- 26. ¿Cómo puedo filtrar entidades que NO están en una relación muchos a muchos usando LLBLGen Pro?
- 27. Cómo eliminar fácilmente la relación muchos a muchos con Django
- 28. Diseño de relación de muchos a muchos - Intersection Table Design
- 29. Muchos a muchos tabla unirse a Pivote
- 30. ¿Cómo agregar un orden de clasificación a una tabla de cierre MySQL que representa una relación muchos a muchos?