Slick 3.0.0: How to query one-to-many / many-to-many relations

前端 未结 2 1003
广开言路
广开言路 2020-12-29 07:00

Basically the same question has been asked about a year ago for slick 2.x (scala slick one-to-many collections). I\'m wondering if there has any progression been made with t

2条回答
  •  有刺的猬
    2020-12-29 07:45

    IMO your code looks fine. It really depends on what feels more readable to you. Alternatively, you can use join as well:

    val findBooksQuery = libraries
      .join(libraryToBooks).on(_.id === _.libraryId)
      .join(books).on(_.id === _._2.bookId)
      .result
    
    val action = (for {
      booksResult <- findBooksQuery
    } yield {
      booksResult.map { row =>
        val (libraryTableRow, libraryToBooksTableRow) = row._1
        val booksTableRow = row._2
        // TODO: Access all data from the rows and construct desired DS
      }
    }
    
    db.run(action)
    

    You can then do a groupBy on a particular key to get the kind of data structure you are looking for. In this case, it would be more evolved as it is join across three tables. Example, add following to your query:

    val findBooksQuery = libraries
      .join(libraryToBooks).on(_.id === _.libraryId)
      .join(books).on(_.id === _._2.bookId)
      // To group by libraries.id
      .groupBy(_._1.id)
      .result
    

提交回复
热议问题