slick db.run return 直接指向对象

slick db.run return direct the object

目前我这样做:

  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到return创建的记录。

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

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