javascript - Sequelize 多对多关系过滤
问题描述
我有 2 个具有多对多关系 ( JobPost
, Skill
) 的模型,我想在其中搜索所有JobSkill
包含特定Skill
. 到目前为止,我已经有了以下内容,
招聘岗位型号:
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 } }
which 返回JobPost
只有一个Skill
与 SkillId 匹配的 s。我希望JobPost
s 返回该帖子的任何技能与 SkillId 匹配的位置。因此,如果一个帖子有 2 个技能,并且给定的技能与其中一个技能匹配,它将出现在结果中。
解决方案
我认为问题可能只存在于 where 语句中。我做了类似的事情:
skillId: { [Sequelize.Op.in]: skillsList }
考虑到您在skillsList
.
推荐阅读
- java - java中的汽车加油问题。任何人都可以找出while循环条件中的任何错误吗?
- c# - 你如何从 List<> 到 Automapper c# 中的类
- google-api - 如何从 Google 的 People API 中的 DisplayName 获取联系方式
- javascript - 倒计时状态栏
- performance - 从 paypalobjects.com 加载的 Noop.js 失败/非常慢
- node.js - 是否可以在 ReactJS 中使用服务器 VM 上设置的环境变量?
- reactjs - 将索引数据库与动态缓存数据同步并在联机时更新状态
- c++ - 修改后的文件出现意外的 fgets 行为
- sass - Hugo:从 GitHub 导入 sass / 代码的最佳方式?
- asp.net-core - Entity FrameWork Core 不显示查询返回的值