使用 knex.js使用选择查询的结果更新现有列



产品(id, currentdraw, totaldraw, ratio(

产品就是我的桌子

我想使用电流消耗和总绘制来更新比率

这是我的代码

Product.updateRatio = function(pid, cb) {
db('product')
  .where({
    productid : pid
  })
  .select('currentdraw', 'totaldraw')
  .then(function(ratiolist) {
    db('product')
      .where({
        productid : pid
      })
      .update({
        ratio : ratiolist.currentdraw / ratiolist.totaldraw
      })
      cb(null, ratiolist);
  })
  .catch(function(err) {
    cb(new GeneralErrors.Database());
    console.log('updateRatio');
  });
}

当我运行代码时,没有发生错误,但比率列没有更新。

我不知道哪里出了问题。

有人可以帮助我吗?谢谢

我想你的ratiolist是数组而不是对象,添加console.dir(ratiolist)以检查第一个查询返回的内容:

function(ratiolist) {
  // here ratiolist is an array
  db('product')
    .where({
      productid : pid
    })
    .update({
      // undefined / undefined is NaN
      ratio : ratiolist.currentdraw / ratiolist.totaldraw 
    })
    // second query  is not yet ran when this callback is called
    // try to use promise chains...
    cb(null, ratiolist);
})

执行此查询的更好方法是:

// return value passed as promise instead of callback
Product.updateRatio = function(pid) {
  return db('product')
    .where('productid', pid)
    .update({ 
      ratio : db.raw('?? / ??', ['currentdraw', 'totaldraw'])
    })
    .then(() => db('product').where('productid', pid));
}

如果您坚持使用回调,这应该有效:

Product.updateRatio = function(pid, cb) {
  db('product')
    .where('productid', pid)
    .update({ 
      ratio : db.raw('?? / ??', ['currentdraw', 'totaldraw'])
    })
    .then(() => db('product').where('productid', pid))
    .then(ratiolist => cb(null, ratiolist));
}

相关内容

  • 没有找到相关文章

最新更新