Scala slick db.run直接返回对象

Scala slick db.run直接返回对象,scala,playframework,slick,Scala,Playframework,Slick,目前,我这样做: def addProcessStepTemplateToProcessTemplate(step: ProcessStepTemplatesModel, processId: Int): Future[Option[ProcessStepTemplatesModel]] = { val action = (processStepTemplates returning processStepTemplates.map(_.id)) += ProcessStepTemp

目前,我这样做:

  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。运行
返回创建的记录


有没有一种方法可以只用一个
db.run

你可以使用动作合成(带用于理解或带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)
  }

您可以使用动作组合(用于理解或使用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)
  }