Sono nuovo di Slick 3 e fino ad ora ho capito che db.run è una chiamata asincrona. il .map o .flatMap viene eseguito una volta restituito il futuro.SLICK 3.0 - più query dipendenti l'una dall'altra - db.run (azione)
Il problema nel mio codice qui sotto è che tutte le sottoclassi non funzionano (nb db.run nidificato).
Concettualmente, cosa non ottengo? È valido fare questo tipo di codice come di seguito? fondamentalmente nella .map della prima query eseguo alcune azioni a seconda della prima query.
Vedo ovunque per loop con rendimento, è l'unico modo per andare? Il problema nel mio codice è correlato al valore Future restituito?
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 ha fatto la risposta qui sotto aiuto? O non era chiaro? O mi sono perso il punto di cui hai bisogno? –
Grazie, RIchard, ha funzionato subito. Ero in vacanza e non potevo rispondere subito. – user1237981
Ottimo! Grazie. –