Как сгруппировать результаты с Slick - PullRequest
0 голосов
/ 10 октября 2019

Допустим, у меня есть эти две модели:

case class Department(id: Long, title: String)
case class Program(id: Long, departmentId: Long, title: String)

И две TableQuery, departments и programs, основанные на Table, сопоставленные с этими классами дел соответственно.

Я хотел бы сделать запрос, возвращающий Seq[(Department, Seq[Program])], где у меня есть список департаментов с соответствующими программами.

Я начал так:

val query = 
  (departments join programs on ((d, p) => d.id === p.departmentId))
    .groupBy {...}

Но что когда-либоЯ помещаю в группу по пункту просто не имеет смысла.

пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

@ osehyum, спасибо за ваш ответ. Ваш запрос возвращает это:

Map[Long, Seq[(Department, Program)]]

Long здесь для идентификатора отдела.

Мне удалось включить его с помощью:

val query = departments.joinLeft(programs).on(_.id === _.departmentId).result
    .map(_.groupBy(_._1).toSeq)
    .map(items => items.map { case (dep, rows) =>
      (dep, rows.map(_._2).filter(_.isDefined).map(_.get))
    })

Примечаниечто я использовал joinLeft на этот раз, поэтому Program стал Option[Program], поэтому мне пришлось filter и map. Протестировано.

0 голосов
/ 11 октября 2019

Как насчет этого?

val query = departments.join(programs).on(_.id === _.departmentId)
        .result
        .map(_.groupBy(_._1.id))

db.run(query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...