作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的模型:
用户
团体
评论
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) 中,我在其中链接了用户ID 和组ID。一个用户可以有多个组,一个组可以有多个用户。
第二部分是将我的用户链接到他们的评论。一个用户可以有很多条评论,一条评论属于一个用户。
现在,如果我想显示每个用户的组,我会这样做:
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 , 我会执行 raw queries ...
谢谢!
这似乎可以解决问题(+ 检查所选答案中的链接):
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,
})
})
})
})
最佳答案
嵌套关联的预加载正在进行中,但尚未完成。您可以在此处关注进度:https://github.com/sequelize/sequelize/issues/388
关于mysql - SequelizeJS - 包含带有 hasMany + joinTableName 的表。笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18733538/
这是我的模型: 用户 团体 评论 Users.hasMany(Groups, {foreignKey: 'userID', joinTableName: 'user_has_groups'}); Co
我是一名优秀的程序员,十分优秀!