Этот вопрос о скользком 3.0 или 3.1 (Я гибкий о том, что)Скалы + сликовые 3: Вставка результата одного запроса в другую таблицу
У меня есть промежуточный запрос, который я процесс с map
, for
и т.д. чтобы получить результат, который я хочу. В конце концов, у меня есть
val foo: DBIOAction[Seq[MySchema.Bar], NoStream, Effect.Read]
Теперь у меня есть val bar: TableQuery[MySchema.Bar]
, и я хочу, чтобы вставить Foo в него.
Если foo будет Seq
, я мог бы просто сделать bar ++= foo
, но это не так.
Единственный способ, который я нашел, - это материализовать результат, ожидая его. Как это
val query = (bar ++= Await.result(db.run(foo), Duration.Inf))
Очевидно query
должен быть запущен в какой-то момент с db.run
. Но теперь у меня два DB-запуска. Разве не лучше, если бы все было за один проход?
Есть ли лучший способ сделать это?
'бар + = Foo'? Но вам все равно придется 'db.run', независимо от того, является ли это' + = 'или' ++ = '... (?) – kornfridge
Я думаю, что ++ = с побочными эффектами был slick2 api, а slick3 более функциональный, поэтому он требует, чтобы вы явно делали 'db.run' – kornfridge
Да, результат ++ = теперь является запросом, который нужно запустить. Я отредактировал вопрос в этом вопросе. Но я должен сделать два вызова db.run для этой задачи. – masgo