Sailsjs Model.find()没有检索外键

时间:2018-01-29 15:12:30

标签: sails.js associations waterline

我有两个在风帆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的游戏?那会是什么语法?

1 个答案:

答案 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()将产生一个拥有已填充游戏的用户作为其“游戏”对象,正如预期的那样。