【问题标题】:Why do we need a new object in bookshelf.js fetch() method?为什么我们需要 bookshelf.js 的 fetch() 方法中的新对象?
【发布时间】:2015-08-19 16:56:20
【问题描述】:

我是 Node 新手,我使用 bookshelf.js 作为我当前项目的 ORM。 bookshelf.js 的文档在 fetch() 方法下包含了这个 sn-p:

// select * from `books` where `ISBN-13` = '9780440180296'
new Book({'ISBN-13': '9780440180296'})
  .fetch()
  .then(function(model) {
  // outputs 'Slaughterhouse Five'
  console.log(model.get('title'));
});

http://bookshelfjs.org/#Model-fetch

让我困惑的是,如果我们要查询现有记录,为什么还要在这里创建一个新对象? bookshelf.js 的工作方式是否需要为每个返回的结果创建一个新对象?

【问题讨论】:

  • new Book({'ISBN-13': '9780440180296'})?
  • 这就是 API 的工作原理。你需要调用某个东西的方法,并且需要指定查询参数。

标签: javascript node.js orm bookshelf.js


【解决方案1】:

这令人困惑。目前只有一种类型的对象同时代表“模型”和“查询构建器”。

fetch 使用模型上设置的属性预填充 WHERE 子句。

我们正在计划改变这一点。讨论here

我建议不要像上面那样编写代码,而是这样做:

// select * from `books` where `ISBN-13` = '9780440180296'
Book.where({'ISBN-13': '9780440180296'})
  .fetch()
  .then(function(model) {
  // outputs 'Slaughterhouse Five'
  console.log(model.get('title'));
});

(我知道你刚刚从文档中直接复制了这个。)

如果您想就地更新模型,最好使用新的Model#refresh

Book.forge({id: 5}).refresh().then(function (book) {//...

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多