【问题标题】:get the last record id using bookshelf.js/knex.js[mysql] + express.js使用 bookshelf.js/knex.js[mysql] + express.js 获取最后一条记录 id
【发布时间】:2022-02-07 16:27:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: node.js express bookshelf.js knex.js


    【解决方案1】:

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

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

    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)
      })
    })
    

    【讨论】:

    • 我认为没有办法绕过等待主 IO 完成的延迟,以便我可以处理详细信息。
    【解决方案2】:
    knex.select().from('table_name').orderBy([{column:"id",order:"desc"}]).limit(1)
    

    这里我们取 id 并以相反的顺序对其进行排序。

    然后通过限制结果取最后一个结果

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2014-03-25
      • 2020-10-01
      • 2012-10-15
      • 2023-03-16
      相关资源
      最近更新 更多