根据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 } } ]