【发布时间】:2021-09-06 08:59:02
【问题描述】:
我有 2 个具有多对多关系的模型(JobPost、Skill),我想在其中搜索包含特定 Skill 的所有 JobSkills。到目前为止,我已经有了以下内容,
职位模型:
static associate(models) {
this.belongsTo(models.User, { foreignKey: 'authorId', as: 'author' });
this.belongsToMany(models.Skill, { through: models.Job_Skill, foreignKey: 'jobPostId', otherKey: 'skillId', as: 'skills' });
this.belongsToMany(models.JobCategory, { through: models.JobPost_Category, foreignKey: 'jobPostId', otherKey: 'jobCategoryId', as: 'categories' });
this.belongsToMany(models.User, { through: models.JobPostSubscription, foreignKey: 'jobPostId', otherKey: 'userId', as: 'subscriptions' });
}
};
JobPost.init({
authorId: {
type: DataTypes.INTEGER,
allowNull: false
},
title: {
type: DataTypes.STRING,
allowNull: false
},
body: {
type: DataTypes.TEXT
},
budget: {
type: DataTypes.FLOAT,
defaultValue: 0,
validate: {
min: 0
}
},
location: {
type: DataTypes.STRING
},
private: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
deadline: {
type: DataTypes.DATE
},
status: {
type: DataTypes.ENUM(enumJobStatuses),
defaultValue: enumJobStatuses[0]
}
}, {
sequelize,
modelName: 'JobPost',
});
技能模型:
class Skill extends Model {
static associate(models) {
this.Users = this.belongsToMany(models.User, { through: models.User_Skill, foreignKey: 'skillId' });
}
};
Skill.init({
title: DataTypes.STRING
}, {
sequelize,
modelName: 'Skill',
});
Job_Skill 模型:
class Job_Skill extends Model {
static associate(models) {
}
};
Job_Skill.init({
jobPostId: {
type: DataTypes.INTEGER,
primaryKey: true
},
skillId: {
type: DataTypes.INTEGER,
primaryKey: true
}
}, {
sequelize,
modelName: 'Job_Skill',
timestamps: false
});
主代码:
models.JobPost.findAll({
include: {
model: models.Skill,
as: 'skills',
attributes: ['id', 'title'],
through: { where: { skillId: req.query.skillId } }
}
})
但这会返回所有帖子。
我尝试使用{ where: { '$skills.id$': req.query.skillId } },它只返回JobPosts,它只有一个Skill与skillId匹配。
我希望JobPosts 返回该帖子的任何技能与 SkillId 匹配的位置。因此,如果一个帖子有 2 个技能,并且给定的技能与其中一个技能匹配,它将出现在结果中。
【问题讨论】:
标签: javascript node.js sequelize.js