首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯卡拉对很多人都很好玩

斯卡拉对很多人都很好玩
EN

Stack Overflow用户
提问于 2018-11-26 08:03:42
回答 1查看 34关注 0票数 0

我有一个端点让我说/ order /其中我可以发送json对象(我的订单),它包含一些产品等等,所以我的问题是,我必须首先保存订单,然后等待订单id从db返回,然后用这个新的订单id保存我的产品(我们正在讨论许多关系,这就是为什么会有另一个表)

考虑一下这种控制器方法。

代码语言:javascript
复制
def postOrder = Action(parse.json[OrderRest]) { req => {

    Created(Json.toJson(manageOrderService.insertOrder(req.body)))
  }
}

这就是我的回购方法的样子

代码语言:javascript
复制
  def addOrder(order: Order) = db.run {
    (orders returning orders) += order
  }

我如何链接db.runs先插入订单,得到订单id,然后用我刚得到的订单id插入我的产品?

我正在考虑在我的控制器和回购之间安装一些服务,并在那里管理这些操作,但我不知道从哪里开始

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-26 10:01:53

您可以使用for链接数据库操作。下面是一个示例,通过添加一个表头行来表示表,然后添加数据行,从而向db添加一个表。在本例中,它是一个包含(age, value)的简单表。

代码语言:javascript
复制
/** Add a new table to the database */
def addTable(name: String, table: Seq[(Int, Int)]) = {
  val action = for {
    key <- (Headers returning Headers.map(_.tableId)) += HeadersRow(0, name)
    _ <- Values ++= table.map { case (age, value) => ValuesRow(key, age, value) }
  } yield key

  db.run(action.transactionally)
}

这是从工作代码中减少的,但是它应该给出如何做你想做的事情的想法。第一个for语句将生成order id,然后第二个语句将该order id添加到order。

这是transactionally完成的,这样就不会创建新的订单,除非订单数据是有效的(在数据库术语中)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53476855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档