我有两个在风帆v0.12中具有一对多关联的模型:游戏模型和用户模型(一个游戏有两个用户)。
当我找到一个用户时,我想看到它的游戏对象的外键。我记得我曾经在之前版本的帆中看到这个属性,但似乎已经消失了。
以下是我的模型的简化版本:
Game.js:
module.exports = {
name: {
type: 'string',
},
players: {
collection: 'user',
defaultsTo: []
}
};
和User.js:
module.exports = {
email: {
type: 'string',
required: true
},
game: {
model: 'game'
}
};
我想找一个用户模型并查看其电子邮件'和#"游戏'属性。以下是一个示例查询:
User.find(7).exec(function gotUser(user) {
console.log(user); // -> {'email': 'someUserEmail'} MISSING 'game'
}
修改 游戏'即使在find()上调用populateAll()时,也不会出现属性:
User.find(7).populateAll().exec(function gotPopulatedUser(user) {
console.log(user); // -> {'email': 'someUserEmail'} MISSING 'game'
}
有没有办法在找到用户时查看用户关联的游戏ID(外键)?或者我需要搜索所有在其玩家收藏中拥有用户ID的游戏?那会是什么语法?
答案 0 :(得分:0)
这是我的错误!
Game对象的模型定义缺少'via'键。
不知何故,两者在没有这个的情况下已经足够关联填充游戏对象(game.find()。populateAll()会成功填充“玩家”属性),但游戏模型应该是:
module.exports = {
name: {
type: 'string'
},
players: {
collection: 'user',
via: 'game', //This was missing
defaultsTo: []
}
};
有了这一行,User.find()将产生一个用户,该用户将相关游戏的ID作为其“游戏”属性,而user.find.populateAll()将产生一个拥有已填充游戏的用户作为其“游戏”对象,正如预期的那样。