为啥我们需要 bookshelf.js 的 fetch() 方法中的新对象?
Posted
技术标签:
【中文标题】为啥我们需要 bookshelf.js 的 fetch() 方法中的新对象?【英文标题】: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 的工作原理。你需要调用某个东西的方法,并且需要指定查询参数。
【参考方案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) //...
【讨论】:
以上是关于为啥我们需要 bookshelf.js 的 fetch() 方法中的新对象?的主要内容,如果未能解决你的问题,请参考以下文章
Bookshelf.js / Knex.js 嵌套在单个查询中的位置