一对一的关联是否应该填充双方?
Should one-to-one associations populate both sides?
我有两个模型(用户和代理)。然后我创建一个用户和一个代理。我希望在为 /user 和 /agent 使用蓝图路由时看到关联。我只看到用户模型通过 /agent 蓝图与代理相关联。 /user 蓝图没有任何 reference/association 代理。
当我尝试使用以下命令通过用户 ID 访问代理时,问题就出现了:
User.findOne(req.body.userId).populate('agent').exec(function(err, agent)
"agent"实际上是用户信息...不是代理。
这是我的模型:
用户:
attributes: {
agent: {
model: 'agent',
via: 'owner'
}
}
代理人:
attributes: {
owner: {
model: 'user'
}
}
感谢阅读!
你理解的populate
错了。 populate()
不会用新信息替换上次通话。它从模型中获取属性(您在 populate('attribute')
中指定)并将模型中该属性的 ID 替换为通过其 ID 查找的另一个模型信息。
让我们深入研究示例。
您有 User
和 Agent
模型。
// api/models/User.js
module.exports = {
attributes: {
agent: {
model: 'Agent',
via: 'owner'
}
}
};
// api/models/Agent.js
module.exports = {
attributes: {
owner: {
model: 'User',
via: 'agent'
}
}
};
您正在呼叫 User.findOne(userId).populate('agent').exec(function(err, user) {}
,据我所知,您预计只会收到 agent
。错误的。它 returns User
模型以 Agent
模型作为 User
模型的属性。
// api/controllers/AnyController.js
module.exports = {
index: function(req, res) {
User
.findOne(req.param('userId'))
.populate('agent')
.then(function(user) {
console.log(user); // User information
console.log(user.agent); // Agent information for that user
return user;
})
.then(res.ok)
.catch(res.negotiate);
}
};
您可以在此处阅读更多有关人口的信息 - http://mongoosejs.com/docs/populate.html
Sails 不完全支持一对一模型关联——您必须在两侧设置 "foreign key"。有关详细信息,请参阅 。我很想把这个问题作为那个问题的副本来关闭,但设置略有不同。
我有两个模型(用户和代理)。然后我创建一个用户和一个代理。我希望在为 /user 和 /agent 使用蓝图路由时看到关联。我只看到用户模型通过 /agent 蓝图与代理相关联。 /user 蓝图没有任何 reference/association 代理。
当我尝试使用以下命令通过用户 ID 访问代理时,问题就出现了:
User.findOne(req.body.userId).populate('agent').exec(function(err, agent)
"agent"实际上是用户信息...不是代理。
这是我的模型:
用户:
attributes: {
agent: {
model: 'agent',
via: 'owner'
}
}
代理人:
attributes: {
owner: {
model: 'user'
}
}
感谢阅读!
你理解的populate
错了。 populate()
不会用新信息替换上次通话。它从模型中获取属性(您在 populate('attribute')
中指定)并将模型中该属性的 ID 替换为通过其 ID 查找的另一个模型信息。
让我们深入研究示例。
您有 User
和 Agent
模型。
// api/models/User.js
module.exports = {
attributes: {
agent: {
model: 'Agent',
via: 'owner'
}
}
};
// api/models/Agent.js
module.exports = {
attributes: {
owner: {
model: 'User',
via: 'agent'
}
}
};
您正在呼叫 User.findOne(userId).populate('agent').exec(function(err, user) {}
,据我所知,您预计只会收到 agent
。错误的。它 returns User
模型以 Agent
模型作为 User
模型的属性。
// api/controllers/AnyController.js
module.exports = {
index: function(req, res) {
User
.findOne(req.param('userId'))
.populate('agent')
.then(function(user) {
console.log(user); // User information
console.log(user.agent); // Agent information for that user
return user;
})
.then(res.ok)
.catch(res.negotiate);
}
};
您可以在此处阅读更多有关人口的信息 - http://mongoosejs.com/docs/populate.html
Sails 不完全支持一对一模型关联——您必须在两侧设置 "foreign key"。有关详细信息,请参阅