Sequelize.js 使用Sequelize,如何查询连接模型上的模型’;不包括它的财产是什么?
对于定义如下的模型:Sequelize.js 使用Sequelize,如何查询连接模型上的模型’;不包括它的财产是什么?,sequelize.js,Sequelize.js,对于定义如下的模型: Team = sequelize.define 'team', name: Sequelize.STRING User = sequelize.define 'user', name: Sequelize.STRING foo: Sequelize.INTEGER Team.hasMany User User.belongsTo Team 如何获取包含foo等于42的用户的所有团队,而不在结果中包含用户,也不在结果中多次包含同一团队,即,如何生成以下查询
Team = sequelize.define 'team',
name: Sequelize.STRING
User = sequelize.define 'user',
name: Sequelize.STRING
foo: Sequelize.INTEGER
Team.hasMany User
User.belongsTo Team
如何获取包含foo
等于42
的用户的所有团队,而不在结果中包含用户,也不在结果中多次包含同一团队,即,如何生成以下查询
SELECT DISTINCT team.id, team.name
FROM team
INNER JOIN user ON user.team_id = team.id
WHERE user.foo = 42
Edit:查询应该是,也就是说,使用findAll()的raw
选项在查找*
方法的include
选项中使用内部联接。那么DISTINCT呢?您可以尝试以下方法:
Team.findAll({
attributes: ['DISTINCT team.id','team.name'], // hack with distinct
include: [{
model: User,
required: true, // inner join
attributes: [] // exclude user fields from select
}]
});
不幸的是,即使使用空的attributes数组,查询中仍然包含用户的id列,因此DISTINCT是无用的。另一方面,您的回答让我意识到,对于空属性数组,即使查询不是我想要的,它实际上也会给出预期的结果。对不起,我忘了提到它应该是一个,也就是说,使用findAll()
的raw
选项,使用该选项,匹配的团队可以在结果中多次出现。