And*_*pov 2 orm node.js sequelize.js
我正在将Sequelize.js用于ORM,并具有一些关联(现在实际上不再重要了)。我的模型获得get和set从这些关联的方法。像这样(来自文档):
var User = sequelize.define('User', {/* ... */})
var Project = sequelize.define('Project', {/* ... */})
// One-way associations
Project.hasOne(User)
/*
...
Furthermore, Project.prototype will gain the methods getUser and setUser
according to the first parameter passed to define.
*/
Run Code Online (Sandbox Code Playgroud)
现在,我有了Project.getUser(),它返回了Promise。但是,如果我在同一个对象上两次调用此方法,则会使SQL查询执行两次。
我的问题是-我是否缺少某些东西,或者这是预期的行为?实际上,我不想每次我对此对象调用相同的方法时都进行其他查询。
如果这是预期的-我应该使用带有我手动填充的成员变量的自定义getter并在存在时返回吗?还是有更聪明的东西?:)
根据DeBuGGeR的答案进行更新 -我了解includes在查询时可以使用它来渴望加载所有内容,但是我根本不需要它,而且我不能一直这样做。如果我一开始就加载整个数据库,那只是浪费资源和大笔开销,只是为了了解(按某些标准)我不需要它。我想根据情况进行其他查询。但是我也无力销毁我拥有的所有模型(DAO对象)并创建新模型,其中包含所有信息。我应该能够更新其中的某些部分(从关系中丢失)。
如果使用getUser(),它将进行查询调用,它将使您能够访问用户。您可以根据关联将其手动保存到project.user或project.users。
但是您可以尝试快速加载
Project.find({
include: [
{ model: User, as: 'user' } // here you HAVE to specify the same alias as you did in your association
]
}).success(function(project){
project.user // contains the user
});
Run Code Online (Sandbox Code Playgroud)
还有例如getUser()。不要期望它会自动缓存用户,也不要巧妙地覆盖它,因为它会产生副作用。应该从数据库中获取getUser,并且应该!
Project.getUser().then(function(user){
// user is available and is a sequelize object
project.user = user; // save project.user and use it till u want to
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5547 次 |
| 最近记录: |