为什么我们需要bookshelf.js fetch()方法中的新对象?

时间:2015-08-19 16:56:21

标签: javascript node.js orm bookshelf.js

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

// 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的工作方式是否需要为每个返回的结果创建一个新对象?

1 个答案:

答案 0 :(得分:1)

这令人困惑。目前只有一种类型的对象代表" model"和"查询构建器"。

fetch使用模型上的set属性预填充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) {//...