根据belongsToMany关系字段进行过滤

使用链接表来过滤数据是不可能的。 有两个表教师和俱乐部。 他们有关如何belongsToMany。 我需要让所有的教练club_id =值。

教练模型:

sequelize.define('Instructor', { instance_id: DataTypes.INTEGER, name: DataTypes.STRING(255) }, { tableName: 'instructors', timestamps: false, classMethods: { associate: function (models) { Instructor.belongsToMany(models.Club, { through: 'InstructorClub' }); } } }); 

俱乐部模式:

 sequelize.define('Club', { instance_id: DataTypes.INTEGER, name: DataTypes.STRING }, { tableName: 'clubs', timestamps: false, classMethods: { associate: function (models) { Club.belongsToMany(models.Instructor, { through: 'InstructorClub' }); } } }); 

相关表格:

 sequelize.define('InstructorClub', { InstructorId: { type: DataTypes.INTEGER, field: 'instructor_id' }, ClubId: { type: DataTypes.INTEGER, field: 'club_id' } }, { tableName: 'instructors_clubs' timestamps: false }); 

我想获得的数据如下::

 models .Instructor .findAll({ include: [ { model: models.Club, as: 'Clubs', through: { attributes: [] } } ], # I need to filter by club.id where: { 'Clubs.id': 10 } }) 

当前查询生成的SQL:

 SELECT `Instructor`.`id`, `Instructor`.`instance_id`, `Instructor`.`name`, `Clubs`.`id` AS `Clubs.id`, `Clubs`.`name` AS `Clubs.name`, `Clubs.InstructorClub`.`club_id` AS `Clubs.InstructorClub.ClubId`, `Clubs.InstructorClub`.`instructor_id` AS `Clubs.InstructorClub.InstructorId` FROM `instructors` AS `Instructor` LEFT OUTER JOIN (`instructors_clubs` AS `Clubs.InstructorClub` INNER JOIN `clubs` AS `Clubs` ON `Clubs`.`id` = `Clubs.InstructorClub`.`club_id`) ON `Instructor`.`id` = `Clubs.InstructorClub`.`instructor_id` WHERE `Instructor`.`Clubs.id` = 10; 

那么,我需要一些这样的:

 SELECT `Instructor`.`id`, `Instructor`.`instance_id`, `Instructor`.`name`, `Clubs`.`id` AS `Clubs.id`, `Clubs`.`name` AS `Clubs.name`, `Clubs.InstructorClub`.`club_id` AS `Clubs.InstructorClub.ClubId`, `Clubs.InstructorClub`.`instructor_id` AS `Clubs.InstructorClub.InstructorId` FROM `instructors` AS `Instructor` LEFT OUTER JOIN (`instructors_clubs` AS `Clubs.InstructorClub` INNER JOIN `clubs` AS `Clubs` ON `Clubs`.`id` = `Clubs.InstructorClub`.`club_id`) ON `Instructor`.`id` = `Clubs.InstructorClub`.`instructor_id` # It should be like this: WHERE `Clubs`.`id` = 10; 

将你的'哪里'移动到包括(与模型,作为和通过)。

 include: [ { model: models.Club, as: 'Clubs', through: { attributes: [] }, where: { 'Clubs.id': 10 } } ]