我有两个模型,project
和user
,它们在几个方面相互关联。
首先,project
的{{1}} 拥有,具有以下关联:
user
其次,Project.belongsTo(models.User, { as: 'Owner', foreignKey: 'userId' });
和project
通过user
喜欢与user
相关联。
project
第三,Project.belongsToMany(models.User, { as: 'UserLikes', through: models.ProjectLikes, foreignKey: 'projectId' });
User.belongsToMany(models.Project, { as: 'LikedProjects', through: models.ProjectLikes, foreignKey: 'userId' });
和project
也可以user
通过角色成为user
的一部分。
project
我想要实现的是找到所有项目,并与他们一起返回关联的"喜欢"计数。但是我真的很难弄清楚如何做到这一点。
我读过我应该可以做的事情:
Project.belongsToMany(models.User, { as: 'Users', through: models.ProjectRoles, foreignKey: 'projectId' });
User.belongsToMany(models.Project, { as: 'Roles', through: models.ProjectRoles, foreignKey: 'userId' });
但我收到models.Project.findAll({
limit: 5,
attributes: ['Project.*', [models.sequelize.fn('COUNT', models.sequelize.col('UserLikes.id')), 'totalLikes']],
include: [ { model: models.User, as: 'UserLikes' }],
group: [ models.Project.rawAttributes.id, models.sequelize.col('UserLikes.id') ]
})
.then(function (projects) {
return res.json(projects);
});
错误。
我尝试使用特定的连接表模型将双方的关联更改为missing FROM-clause entry for table "UserLikes
,然后执行:
hasMany
但是我得到了相同的错误,或者关于Ids的含糊不清或有关Project.id的错误需要在GROUP BY子句中的错误(即使它是?!)。
我正在试图找出一些应该非常直接的东西......我正在考虑切换回MongoDB!
请帮忙......谢谢!
答案 0 :(得分:0)
我对belongsToMany有相同的问题,但是我设法为hasMany解决了它。您必须将attributes: []
放置在models.ProjectLikes
中(包含在其中),并且要修复limit
错误,必须在subQuery: false
选项中放置findAll
。>