Sequelize属于很多get和post请求

Sequelize belongs to many get and post request

我加入了模型技术和项目的许多协会。同时在客户端,我有两个table,免费技术和项目上的技术。请告诉我(或建议如何去做)如何为所有免费技术发出获取请求,以及如何将它们添加到项目的 table 中的 post 请求。我想出了所有的关联,但停在了这个。我将不胜感激。

models/Project.js

const {
  Model
} = require("sequelize");
module.exports = (sequelize, DataTypes) => {
  class Project extends Model {

    static associate(models) {
      Project.hasMany(models.Role, { foreignKey: "projectId", as: "roles" });
      Project.belongsToMany(models.Technology, { foreignKey: "projectId", through: "ProjectsTechnologies"});
    }
  };
  Project.init({
    title: DataTypes.STRING,
    description: DataTypes.STRING,
    image: DataTypes.STRING
  }, {
    sequelize,
    modelName: "Project",
  });
  return Project;
}; 

models/Technology.js

const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Technology extends Model {

    static associate(models) {
      Technology.belongsToMany(models.Project, { foreignKey: "technologyId", through: "ProjectsTechnologies"});
    }
  }
  Technology.init({
    name: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'Technology',
  });
  return Technology;
};

*models/ProjectsTechs

const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class ProjectsTechnologies extends Model {

    static associate(models) {
      ProjectsTechnologies.belongsTo(models.Project, {foreignKey: "projectId"});
      ProjectsTechnologies.belongsTo(models.Technology, {foreignKey: "technologyId"});
    }
  };
  ProjectsTechnologies.init({
    projectId: DataTypes.STRING,
    technologyId: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'ProjectsTechnologies',
  });
  return ProjectsTechnologies;
};

目前我正在执行此获取请求以获取所有免费技术

router.get("/techologies", async (req, res) => {
  const listOfTech = await Technology.findAll({
    include: [
      {
        model: Project,
        as: "projects",
        through: {
          model: ProjectsTechnologies
        }
      }
    ]
  });
  res.json(listOfTech);
});

并且 post 需要 posting 技术在“项目中”table

router.post("/create/:id", async (req, res) => {
  const technology = await ProjectsTechnologies.create(req.body);
  const project = await Project.findOne({
    where: {
      id: req.params.id
    }
  });
  res.json(technology);
});

我也一直在尝试不同的做法,因为这些选项对我来说似乎不合适。

要查询未在任何项目中使用的技术列表,您需要在 where 选项中使用子查询:

const listOfTech = await Technology.findAll({
    where: Sequelize.literal('NOT EXISTS (SELECT 1 FROM `ProjectsTechnologies` where `ProjectsTechnologies`.`technologyId`=`Technology`.`id`)')
  });