Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sequelize.js 使用Sequelize,如何查询连接模型上的模型’;不包括它的财产是什么?_Sequelize.js - Fatal编程技术网

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
选项,使用该选项,匹配的团队可以在结果中多次出现。