一对一的协会是否应该是双方的?
我有两个模型(用户和代理)。 然后我创build一个用户和一个代理。 我期待在使用BOTH / user和/ agent的蓝图路线时看到关联。 我只看到用户模型通过/代理蓝图与代理相关联。 /用户蓝图对代理没有任何参考/关联。
当我尝试使用以下命令通过userId访问代理时,问题就出现了:
User.findOne(req.body.userId).populate('agent').exec(function(err, agent)
“代理”实际上是用户信息…而不是代理人。
这是我的模特:
用户:
attributes: { agent: { model: 'agent', via: 'owner' } }
代理:
attributes: { owner: { model: 'user' } }
谢谢阅读!
Sails不完全支持一对一的模型关联 – 你必须在两边设置“外键”。 有关更多信息,请参阅https://stackoverflow.com/a/27752329/345484 。 我试图把这个问题作为这个问题的一个重复来解决,但是设置稍有不同。
你已经理解错误。 populate()
不会使用新信息replace上次调用。 它从模型(您在populate('attribute')
指定)中获取属性,并将模型中的该populate('attribute')
idreplace为由其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
错误。 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