gpt4 book ai didi

node.js - Sequelize.js - 如何正确使用关联的 get 方法(每次调用都没有 sql 查询)?

转载 作者:搜寻专家 更新时间:2023-11-01 00:17:57 26 4
gpt4 key购买 nike

我正在为 ORM 使用 Sequelize.js 并且有一些关联(现在实际上无关紧要)。我的模型从这些关联中获取 getset 方法。像这样(来自文档):

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.
*/

现在,我有 Project.getUser(),它返回一个 Promise。但是,如果我对同一个对象调用两次,我将执行两次 SQL 查询。

我的问题是 - 我是否遗漏了什么,或者这是预期的行为?实际上,我不想每次在此对象上调用相同的方法时都进行额外的查询。

如果这是预料之中的——我是否应该将自定义 getter 与我手动填充并返回(如果存在)的成员变量一起使用?或者有什么更聪明的东西? :)

更新从 DeBuGGeR 的回答来看——我知道我可以在进行查询时使用 includes 来急切加载所有内容,但我根本不需要它,而且我不能一直这样做。如果我一开始就加载我的整个数据库,只是为了理解(根据某些标准)我不需要它,那是浪费资源和巨大的开销。我想根据情况进行额外的查询。但我也不能破坏我拥有的所有模型(DAO 对象)并创建新的模型,其中包含所有信息。我应该能够更新其中缺失的部分(从关系中)。

最佳答案

如果您使用 getUser() 它将进行查询调用,它不会授予您访问用户的权限。您可以根据关联手动将其保存到 project.user 或 project.users。

但是你可以试试Eager Loading

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

});

还有 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
})

关于node.js - Sequelize.js - 如何正确使用关联的 get 方法(每次调用都没有 sql 查询)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30187289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com