Jestem nowicjuszem w Slick 3 i do tej pory zrozumiałem, że db.run to wywołanie asynchroniczne. Mapa .map lub .flatMap jest uruchamiana po zwróceniu Przyszłości.SLICK 3.0 - wiele zapytań zależnych od siebie - db.run (akcja)
Problem w poniższym kodzie polega na tym, że wszystkie zapytania podrzędne nie działają (zagnieżdżone db.run).
Pojęciowo mówiąc, czego nie dostaję? Czy prawidłowe jest wykonywanie tego rodzaju kodu, jak poniżej? zasadniczo w .map pierwszego zapytania wykonuję pewne czynności w zależności od pierwszego zapytania.
Widzę wszędzie dla pętli z zyskiem, czy to jedyny sposób, aby przejść? Czy problem w moim kodzie jest związany z zwróconą wartością Future?
val enterprises = TableQuery[Enterprise]
val salaries = TableQuery[Salary]
//Check if entered enterprise exists
val enterpriseQS = enterprises.filter(p => p.name.toUpperCase.trim === salaryItem.enterpriseName.toUpperCase.trim).result
val result=db.run(enterpriseQS.headOption).map(_ match
{
case Some(n) => {
//if an enterprise exists use the ID from enterprise (n.id) when adding a record to salary table
val addSalary1 = salaries += new SalaryRow(0, n.id, salaryItem.worker)
db.run(addSalary1)
}
case None => {
//if an enterprise with salaryItem.enterpriseName doesn't exist, a new enterprise is inserted in DB
val enterpriseId = (enterprises returning enterprises.map(_.id)) += EnterpriseRow(0, salaryItem.enterpriseName)
db.run(enterpriseId).map{
e => {
val salaryAdd2 = salaries += new SalaryRow(0, e, salaryItem.worker)
db.run(salaryAdd2)
}
}
}
})
Hi @ user1237981 zrobił odpowiedź poniżej pomoc? A może było to niejasne? A może brakowało mi tego, czego potrzebujesz? –
Dziękuję RIchard, zadziałało od razu. Byłem na wakacjach i nie mogłem odpowiedzieć od razu. – user1237981
Świetnie! Dziękuję Ci. –