1

这是我的模型:
用户

评论

Users.hasMany(Groups, {foreignKey: 'userID', joinTableName: 'user_has_groups'});
Comments.hasMany(Users, {foreignKey: 'groupID', joinTableName: 'user_has_groups'});

Users.hasMany(Comments);
Comments.belongsTo(Users);

所以基本上,我的用户和我的都在一个 n:m 表(user_has_groups)中,我在其中链接了 userID 和 groupID。一个用户可以有很多组,一个组可以有很多用户。
第二部分是将我的用户链接到他们的评论。一个用户可以有很多条评论,一条评论属于一个用户。

现在,如果我想显示每个用户的组,我会这样做:

Users.findAll({ include : [ Groups ] }).success( function(result) {     
    res.json(result);
});

我将按预期向我发送这样的结果:

{
    "id": 1,
    "name": "Ken",
    "groups": [{
        "id": 1,
        "label": "Administrators"
    }, {
        "id": 2,
        "label": "Contributors"
    }]
}, {
    "id": 2,
    "name": "Barbie",
    "groups": [{
        "id": 2,
        "label": "Contributors"
    }, {
        "id": 3,
        "label": "Readers"
    }]
}

如果我只包含我的评论也是如此:

Users.findAll({ include : [ Comments ] }).success( function(result) {       
    res.json(result);
});

我不在这里展示,但相信我,结果很好。
现在,如果我想同时包含组和评论,sequelize 不知道如何处理笛卡尔积。它将显示:

Users.findAll({ include : [ Groups, Comments ] }).success( function(result) {       
    res.json(result);
});


{
    "id": 1,
    "name": "Ken",
    "groups": [{
        "id": 1,
        "label": "Administrators"
    }, {
        "id": 2,
        "label": "Contributors"
    }, {
        "id": 1,
        "label": "Administrators"
    }],
    "comments":[{
        "id": 1,
        "text": "First! lol"
    }]
}, {
    "id": 2,
    "name": "Barbie",
    "groups": [{
        "id": 2,
        "label": "Contributors"
    }, {
        "id": 3,
        "label": "Readers"
    },{
        "id": 2,
        "label": "Contributors"
    }, {
        "id": 3,
        "label": "Readers"
    }],
    "comments":[{
        "id": 2,
        "text": "Hey Ken!"
    },{
        "id": 3,
        "text": "Why don't you answer!?"
    },{
        "id": 3,
        "text": "Why don't you answer!?"
    }]
}

所以......我只是想知道其他人是否已经面临这种情况,或者你会怎么做?
我真的很想在相同的结果中从用户那里获得组和评论。如果我不能通过 sequelize eager loading,我将执行原始查询......

谢谢!


解决方法

这似乎可以解决问题(+检查所选答案中的链接):

Users.find(id).success(function(user){
    Groups.findAll({ where:{ userID:user.id }}).success(function(groups){
        Comments.findAll({ where:{ userID:user.id }}).success(function(comments){      
            res.json({
                id: user.id,
                name: user.name,
                groups: groups,
                comments: comments,
            })
        })
    })
})
4

1 回答 1

1

嵌套关联的急切加载正在进行中,但尚未完成。您可以在此处关注进度:https ://github.com/sequelize/sequelize/issues/388

于 2013-09-11T10:30:09.073 回答