Node.js 在Sequelize中创建具有多个关联的实例

Node.js 在Sequelize中创建具有多个关联的实例,node.js,sequelize.js,sequelize-cli,Node.js,Sequelize.js,Sequelize Cli,我有NodeJS作为后端,我的数据库是MySql。Sequelize是我的ORM。 在Sequelize 5中,我有两个类:修井、用户(机械师)、客户、客户和专家办公室。 我的数据模型并不复杂,只有1:1的关系。工作订单有一个客户、一个客户和一个专家办公室 我使用Postman来测试我的api。创建包含一些客户字段的工作订单时,会创建工作订单,但不会创建客户 我的关联文件如下所示: const User = require('../models/user'); const WorkOrder =

我有NodeJS作为后端,我的数据库是MySql。Sequelize是我的ORM。 在Sequelize 5中,我有两个类:修井、用户(机械师)、客户、客户和专家办公室。 我的数据模型并不复杂,只有1:1的关系。工作订单有一个客户、一个客户和一个专家办公室

我使用Postman来测试我的api。创建包含一些客户字段的工作订单时,会创建工作订单,但不会创建客户

我的关联文件如下所示:

const User = require('../models/user');
const WorkOrder = require('../models/work-order');
const Customer = require('../models/customer');
const Client = require('../models/client');
const ExpertiseOffice = require('../models/expertise-office');

WorkOrder.belongsTo(User, { foreignKey: 'mechanicId' });
WorkOrder.belongsTo(Client, { foreignKey: 'clientId' });
WorkOrder.belongsTo(Customer, { foreignKey: 'customerId' });
WorkOrder.belongsTo(ExpertiseOffice, { foreignKey: 'expertiseOfficeId' });
// WORK-ORDER MODEL

const Customer = require('./customer');
const Client = require('./client');
const ExpertiseOffice = require('./expertise-office');
const User = require('./user');

const Sequelize = require('sequelize');

const sequelize = require('../util/database');

const WorkOrder = sequelize.define('workOrders', {
  id: {
    type: Sequelize.UUID,
    allowNull: false,
    primaryKey: true,
  },
  projectNumber: {
    type: Sequelize.INTEGER,
    allowNull: true,
  },
  dateInspection: {
    type: Sequelize.DATE,
    allowNull: true,
  },
  mechanicId: {
    type: Sequelize.UUID,
    allowNull: true,
    references: {
      // User belongsTo WorkOrder 1:1
      model: 'User',
      key: 'id',
    },
  },
  clientId: {
    // Opdrachtgever
    type: Sequelize.UUID,
    allowNull: true,
    references: {
      // Client belongsTo WorkOrder 1:1
      model: 'Client',
      key: 'id',
    },
  },
  customerId: {
    // klant
    type: Sequelize.UUID,
    allowNull: true,
    references: {
      // Customer belongsTo WorkOrder 1:1
      model: 'Customer',
      key: 'id',
    },
  },
  expertiseOfficeId: {
    type: Sequelize.UUID,
    allowNull: true,

    references: {
      // ExpertiseOffice belongsTo WorkOrder 1:1
      model: 'ExpertiseOffice',
      key: 'id',
    },
  },
  leakageReason: {
    type: Sequelize.STRING,
    allowNull: true,
  },
  status: {
    type: Sequelize.STRING,
    allowNull: true,
  },
  // Timestamps
  createdAt: Sequelize.DATE,
  updatedAt: Sequelize.DATE,
});

module.exports = WorkOrder;
WorkOrder模型如下所示:

const User = require('../models/user');
const WorkOrder = require('../models/work-order');
const Customer = require('../models/customer');
const Client = require('../models/client');
const ExpertiseOffice = require('../models/expertise-office');

WorkOrder.belongsTo(User, { foreignKey: 'mechanicId' });
WorkOrder.belongsTo(Client, { foreignKey: 'clientId' });
WorkOrder.belongsTo(Customer, { foreignKey: 'customerId' });
WorkOrder.belongsTo(ExpertiseOffice, { foreignKey: 'expertiseOfficeId' });
// WORK-ORDER MODEL

const Customer = require('./customer');
const Client = require('./client');
const ExpertiseOffice = require('./expertise-office');
const User = require('./user');

const Sequelize = require('sequelize');

const sequelize = require('../util/database');

const WorkOrder = sequelize.define('workOrders', {
  id: {
    type: Sequelize.UUID,
    allowNull: false,
    primaryKey: true,
  },
  projectNumber: {
    type: Sequelize.INTEGER,
    allowNull: true,
  },
  dateInspection: {
    type: Sequelize.DATE,
    allowNull: true,
  },
  mechanicId: {
    type: Sequelize.UUID,
    allowNull: true,
    references: {
      // User belongsTo WorkOrder 1:1
      model: 'User',
      key: 'id',
    },
  },
  clientId: {
    // Opdrachtgever
    type: Sequelize.UUID,
    allowNull: true,
    references: {
      // Client belongsTo WorkOrder 1:1
      model: 'Client',
      key: 'id',
    },
  },
  customerId: {
    // klant
    type: Sequelize.UUID,
    allowNull: true,
    references: {
      // Customer belongsTo WorkOrder 1:1
      model: 'Customer',
      key: 'id',
    },
  },
  expertiseOfficeId: {
    type: Sequelize.UUID,
    allowNull: true,

    references: {
      // ExpertiseOffice belongsTo WorkOrder 1:1
      model: 'ExpertiseOffice',
      key: 'id',
    },
  },
  leakageReason: {
    type: Sequelize.STRING,
    allowNull: true,
  },
  status: {
    type: Sequelize.STRING,
    allowNull: true,
  },
  // Timestamps
  createdAt: Sequelize.DATE,
  updatedAt: Sequelize.DATE,
});

module.exports = WorkOrder;
在前端应用程序中,只需要非常有限的字段,因为前端用户可以在稍后添加有关客户、客户端等的信息

目前,我的带有create WorkOrder代码的WorkOrder控制器(工作不正常)是这样的

exports.createWorkOrder = (req, res, next) => {
  console.log('####-in the createWorkOrder endpoint');
  console.log('####-LC-body', req.body);

  const id = req.body.id;
  const projectNumber = req.body.projectNumber;
  const dateInspection = req.body.dateInspection;
  const followupInspection = req.body.followupInspection;
  const clientPresent = req.body.clientPresent;
  const MechanicId = req.body.mechanicId;
  const ClientId = req.body.clientId;
  const CustomerId = req.body.customerId;
  const expertiseOfficeId = req.body.expertiseOfficeId;
  const leakageReason = req.body.leakageReason;
  const visibleWaterDamage = req.body.visibleWaterDamage;
  const visibleWaterDamagePeriod = req.body.visibleWaterDamagePeriod;
  const buildingType = req.body.buildingType;
  const renovatedYear = req.body.renovatedYear;
  const status = req.body.Status;

  WorkOrder.create({
    id: id,
    projectNumber: projectNumber,
    dateInspection: dateInspection,
    followupInspection: followupInspection,
    clientPresent: clientPresent,
    mechanicId: MechanicId,
    clientId: ClientId,
    customerId: CustomerId,
    expertiseOfficeId: expertiseOfficeId,
    leakageReason: leakageReason,
    visibleWaterDamage: visibleWaterDamage,
    visibleWaterDamagePeriod: visibleWaterDamagePeriod,
    buildingType: buildingType,
    renovatedYear: renovatedYear,
    status: status,
  })
    .then((result) => {
      console.log('####-work-order create!');
      res.status(200).json({
        message: 'Work order successfully created!',
        data: result,
      });
      // return res.json(result);
    })
    .catch((err) => {
      console.log('error', err);
    });
};
我的邮递员帖子的主体是:

{
  "id": "1116d911-b4fd-4ce5-9541-0a9efd3b6c98",
  "projectNumber": 1002,
  "dateInspection": null,
  "mechanicId": null,
  "ClientId": null,
  "CustomerId":"2226d911-b4fd-4ce5-9541-0a9efd3b6c98",
  "ExpertiseOfficeId":null,
  "leakageReason": "Test reden",
  "status": "Open",
  "user": null,
  "customer": {
    "id": "2226d911-b4fd-4ce5-9541-0a9efd3b6c98",
    "name": "Test naam customer",
    "companyName": null,
    "contactPerson": null,
    "email": null,
    "street": "test adres",
    "houseNumber": "1",
    "houseNumberExt": "",
    "zipCode": "1111AA",
    "city": "Amsterdam",
    "phoneNumber": null
  },
  "client": null,
  "expertiseOffice": null
}
如何使用相关数据(如客户或客户数据)创建工作订单?创建的数据在开始时未完成,前端用户将添加更多数据以完成一个工单

非常感谢您的阅读和帮助。
Pete

您可以使用sequelize的父创建方法包含子模型。只是你必须管理好正确的命名,比如

如果您的子模型名称是Custome,那么您的身体必须是这样的

{
    //parent model colunm

    "Customer":{
        // customer model column names
    }
}
  WorkOrder.create(req.body,{include:[Customer]})
在你的情况下,你可以这样做

{
    //parent model colunm

    "Customer":{
        // customer model column names
    }
}
  WorkOrder.create(req.body,{include:[Customer]})

请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带解释的答案通常更有帮助,质量更好,更有可能吸引更多的选票。亲爱的Vyas Arpit,非常感谢您的回复。这个:WorkOrder.create(req.body,{include:[Customer]})成功了@PeteBaser很高兴能帮上忙:)你好@VyasArpit,我问了一个关于同一个工作订单的更新流程的问题:,你能帮我吗?非常感谢。。皮特