光滑的db.run返回直接对象

时间:2017-06-07 08:06:35

标签: scala playframework slick

目前我这样做:

  def addProcessStepTemplateToProcessTemplate(step: ProcessStepTemplatesModel, processId: Int): Future[Option[ProcessStepTemplatesModel]] = {
    val action = (processStepTemplates returning processStepTemplates.map(_.id)) += ProcessStepTemplatesModel(None, step.title, step.createdat, step.updatedat, step.deadline, step.comment, step.stepType, step.deleted, Some(processId))
    db.run(action).flatMap(id => {
      db.run(processStepTemplates.filter(_.id === id).result.headOption)
    })
  }

我有两个db.run来返回创建的记录。

有没有办法只用一个db.run来实现这个目标?

1 个答案:

答案 0 :(得分:2)

您可以使用动作合成(使用for-comprehension或使用map / flatMap)。例如:

def addProcessStepTemplateToProcessTemplate(step: ProcessStepTemplatesModel, processId: Int): Future[Option[ProcessStepTemplatesModel]] = {
    val action = (processStepTemplates returning ...)

    val composedAction = action.flatMap { id =>
      processStepTemplates.filter(_.id === id).result.headOption
    }

    db.run(composedAction)
  }