【问题标题】:How to update all resulting models from a BookshelfJS collection?如何从 BookshelfJS 集合更新所有生成的模型?
【发布时间】:2017-05-10 19:30:24
【问题描述】:

例如,给定一个属性为 sold_out 的产品列表,我想更新该集合中每个项目的字段。

在这个特定示例中,假设我要将字段 sold_out = false 设置为该字段设置为 true 的所有项目:

Product.where({sold_out: true})
.fetchAll()
.then(soldOutCollection => {
  return Promise.all(product => {
    return product.save({sold_out: false})
  })
})

这可行,但它会触发集合中每个项目的一个查询。

有没有办法一次更新所有项目(只触发一个查询)?

PS:我试图避免直接使用knex.js

【问题讨论】:

    标签: bookshelf.js


    【解决方案1】:

    我想如果你想这样更新,你可能想试试这个:

    Product
    .where({sold_out: true})
    .save(
        {sold_out: false}, 
        {method: 'update', patch: true}
     )
    

    【讨论】:

    • 这会运行 2 个查询 - 比如首先获取集合中的模型,然后更新它们。我们不能直接更新Collection中的多行吗?
    • 如果我正确理解 Bookshelf API,上面将产生以下查询:UPDATE product SET sold_out='false' WHERE sold_out='true' 基本上只做一个查询来更新它们。
    • 是的。感谢您的确认。我启用了调试标志并进行了验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多