【问题标题】:Sequelize Many to Many Relationship FilteringSequelize 多对多关系过滤
【发布时间】:2021-09-06 08:59:02
【问题描述】:

我有 2 个具有多对多关系的模型(JobPostSkill),我想在其中搜索包含特定 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


    【解决方案1】:

    我认为问题可能只出在 where 语句中。 我做了类似的事情:

    skillId: { [Sequelize.Op.in]: skillsList }

    考虑到您在 skillsList 上有一系列技能 ID/名称。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      相关资源
      最近更新 更多