获得Sequelize BelongsToMany协会的统计

时间:2016-04-17 16:12:22

标签: node.js postgresql count associations sequelize.js

我有两个模型,projectuser,它们在几个方面相互关联。

首先,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!

请帮忙......谢谢!

1 个答案:

答案 0 :(得分:0)

我对belongsToMany有相同的问题,但是我设法为hasMany解决了它。您必须将attributes: []放置在models.ProjectLikes中(包含在其中),并且要修复limit错误,必须在subQuery: false选项中放置findAll