多对多玩玩的scala

时间:2018-11-26 08:03:43

标签: sql scala many-to-many slick

我有一个端点让我说/ order /,我可以在其中发送包含一些产品等的json对象(我​​的订单),所以我的问题是我必须先保存订单并等待订单ID从数据库返回然后用这个新的订单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插入我的产品?

我正在考虑在我的控制器和仓库之间放置一些服务,并在那里管理这些动作,但我不知道从哪里开始

1 个答案:

答案 0 :(得分:0)

您可以使用for链接数据库操作。这是通过添加表头行代表表然后添加数据行将表添加到数据库的示例。在这种情况下,它是一个包含(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语句将生成订单ID,然后第二个语句将添加具有该订单ID的订单。

此操作transactionally进行,因此除非订单数据有效(以数据库术语),否则不会创建新订单。