使用 bookshelf.js/knex.js[mysql] + express.js 获取最后一条记录 ID

get the last record id using bookshelf.js/knex.js[mysql] + express.js

例如,如果我有 2 个表(发票、包含数量的账单项目)通过一对多关系相互连接。 post api 给了我数据。新的账单 ID 将是最后一个 ID+1,所以如果我可以创建一个循环来插入对象,那么 运行

  knex.insert(arrayPurchaseItems, 'id').into('purchaseRequests').then()

所以我不需要等待解决账单插入 但是存在采购请求插入未完成就开始插入的风险。有什么想法吗??

在这种情况下,您应该确保您的数据库已经存储了父实体。它只是比处理并发访问的几率、延迟等更简单。

例如,这样的成语在这种情况下可能会有用:

router.post("/save-master-detail",function(req,res){
  var payload = req.body // make sure to have bodyParser all set on express
  var master = payload.master
  var details = payload.details
  knex("master").insert(master,"idmaster").then(function(ret){
    master.idmaster = ret[0]
    details = details.map(function(det){
      det.idmaster = master.idmaster
      return det
    })
    return knex("detail").insert(details)
  }).then(function(){
    res.send("OK") // or any kind of meaningful response
  }).catch(function(err){
    console.log(err)
    res.status(500).send(err)
  })
})
knex.select().from('table_name').orderBy([{column:"id",order:"desc"}]).limit(1)

Here we are taking id and sorting it in reverse order.

Then take the last result by limiting the result