我有一个端点让我说/ order /其中我可以发送json对象(我的订单),它包含一些产品等等,所以我的问题是,我必须首先保存订单,然后等待订单id从db返回,然后用这个新的订单id保存我的产品(我们正在讨论许多关系,这就是为什么会有另一个表)
考虑一下这种控制器方法。
def postOrder = Action(parse.json[OrderRest]) { req => {
Created(Json.toJson(manageOrderService.insertOrder(req.body)))
}
}这就是我的回购方法的样子
def addOrder(order: Order) = db.run {
(orders returning orders) += order
}我如何链接db.runs先插入订单,得到订单id,然后用我刚得到的订单id插入我的产品?
我正在考虑在我的控制器和回购之间安装一些服务,并在那里管理这些操作,但我不知道从哪里开始
发布于 2018-11-26 10:01:53
您可以使用for链接数据库操作。下面是一个示例,通过添加一个表头行来表示表,然后添加数据行,从而向db添加一个表。在本例中,它是一个包含(age, value)的简单表。
/** 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完成的,这样就不会创建新的订单,除非订单数据是有效的(在数据库术语中)。
https://stackoverflow.com/questions/53476855
复制相似问题