play-slick scala 多对多
play-slick scala many to many
我有一个端点可以说 /order/ 我可以发送 json 对象(我的订单),其中包含一些产品等,所以我的问题是我必须先保存订单并等待从数据库返回订单 ID,然后用这个新订单 ID 保存我的产品(我们正在谈论多对多关系,这就是为什么还有另一个 table)
考虑这个控制器方法
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 插入我的产品?
我正在考虑在我的控制器和存储库之间放置一些服务,并在那里管理这些操作,但我不知道从哪里开始
您可以使用 for
链接数据库操作。下面是通过添加 header 行来表示 table 然后添加数据行来将 table 添加到数据库的示例。在这种情况下,它是一个简单的 table 包含 (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
除非订单数据有效(在数据库方面),否则不会创建新订单。
我有一个端点可以说 /order/ 我可以发送 json 对象(我的订单),其中包含一些产品等,所以我的问题是我必须先保存订单并等待从数据库返回订单 ID,然后用这个新订单 ID 保存我的产品(我们正在谈论多对多关系,这就是为什么还有另一个 table)
考虑这个控制器方法
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 插入我的产品?
我正在考虑在我的控制器和存储库之间放置一些服务,并在那里管理这些操作,但我不知道从哪里开始
您可以使用 for
链接数据库操作。下面是通过添加 header 行来表示 table 然后添加数据行来将 table 添加到数据库的示例。在这种情况下,它是一个简单的 table 包含 (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
除非订单数据有效(在数据库方面),否则不会创建新订单。