首页 > 解决方案 > SEQUELIZE - 尝试在表中插入数据时出错

问题描述

agricultural_machinetable和之间存在 1:1 的关系tractor。在tractor表中,它具有与 tractor_id 相关的农业机器 id。

在此处输入图像描述

低于模型

模型 - 拖拉机

module.exports = function (sequelize, DataTypes) {
  const tractor = sequelize.define('tractor', {
    tractor_id: {
      type: DataTypes.INTEGER(11).UNSIGNED.ZEROFILL,
      allowNull: false,
      primaryKey: true,
      references: {
        model: 'agricultural_machine',
        key: 'agricultural_machine_id',
      },
    },
    traction_id: {
      type: DataTypes.INTEGER(5).UNSIGNED.ZEROFILL,
      allowNull: false,
      references: {
        model: 'traction',
        key: 'id',
      }
    },
    power_id: {
      type: DataTypes.INTEGER(5),
      allowNull: false,
      references: {
        model: 'power',
        key: 'id',
      }
    },
    fuel_id: {
      type: DataTypes.INTEGER(5).UNSIGNED.ZEROFILL,
      allowNull: false,
      references: {
        model: 'fuel',
        key: 'id',
      }
    },
  }, {
    tableName: 'tractor',
    timestamps: false
  });

  tractor.associate = (models) => {
    tractor.belongsTo(models.agricultural_machine, { foreignKey: 'tractor_id' });
    tractor.belongsTo(models.traction, { foreignKey: 'traction_id' });
    tractor.belongsTo(models.power, { foreignKey: 'power_id' });
    tractor.belongsTo(models.fuel, { foreignKey: 'fuel_id' });
  };

  return tractor;
};

型号 - 农业机械


module.exports = function (sequelize, DataTypes) {
  const agricultural_machine = sequelize.define('agricultural_machine', {
    agricultural_machine_id: {
      type: DataTypes.INTEGER(11).UNSIGNED.ZEROFILL,
      allowNull: false,
      primaryKey: true,
      references: {
        model: 'itens',
        key: 'id'
      },
      references: {
        model: 'agricultural_implement',
        key: 'agricultural_implement_id'
      },
    },
    worked_hours: {
      type: DataTypes.STRING(45),
      allowNull: true
    },
    year: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    description: {
      type: DataTypes.TEXT,
      allowNull: true
    },
    brand_agricultural_machine_id: {
      type: DataTypes.INTEGER(5).UNSIGNED.ZEROFILL,
      allowNull: false,
      primaryKey: true,
      references: {
        model: 'brand_agricultural_machine',
        key: 'id'
      }
    },
    model_agricultural_machine_id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      references: {
        model: 'model_agricultural_machine',
        key: 'id'
      }
    }
  }, {
    tableName: 'agricultural_machine',
    timestamps: false
  });

  agricultural_machine.associate = (models) => {
    agricultural_machine.belongsTo(models.itens, { foreignKey: 'agricultural_machine_id' });
    agricultural_machine.belongsTo(models.brand_agricultural_machine, { foreignKey: 'brand_agricultural_machine_id' });
    agricultural_machine.belongsTo(models.model_agricultural_machine, { foreignKey: 'model_agricultural_machine_id' });
    agricultural_machine.belongsTo(models.tractor, { foreignKey: 'tractor_id' });
  };

  return agricultural_machine;
};

通过插入Insomnia

{
  "announcement_vehicle": {
    "personId": 1,
    "price": "50.000,00",
    "description": "Implemento Agrícola",
    "iten": {
     "type": "4",
     "agricultural_machine": {
      "tractor": {
        "tractor_id": 1,
        "traction_id": 1,
        "power_id": 1,
        "fuel_id": 1
       },
     "description": "Máquina Agrícola ACGA",
     "worked_hours": "124",
     "year": 2020,
     "brand_agricultural_machine_id": 2,
     "model_agricultural_machine_id": 1
     }
    }
   }
  }

我有这个错误

ForeignKeyConstraintError [SequelizeForeignKeyConstraintError]: Cannot add or update a child row: a foreign key constraint fails (`autoparanaiba`.`tractor`, CONSTRAINT `fk_tractorXagricultural_machine` FOREIGN KEY (`tractor_id`) REFERENCES `agricultural_machine` (`agricultural_machine_id`) ON DELETE NO ACTION ON UPDATE N)
    at Query.formatError (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/sequelize/lib/dialects/mysql/query.js:233:16)
    at Execute.handler [as onResult] (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/sequelize/lib/dialects/mysql/query.js:51:23)
    at Execute.execute (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/commands/command.js:30:14)
    at Connection.handlePacket (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:408:32)
    at PacketParser.onPacket (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:70:12)
    at PacketParser.executeStart (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/packet_parser.js:75:16)
    at Socket.<anonymous> (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:77:25)
    at Socket.emit (events.js:223:5)
    at Socket.EventEmitter.emit (domain.js:475:20)
    at addChunk (_stream_readable.js:309:12)
    at readableAddChunk (_stream_readable.js:290:11)
    at Socket.Readable.push (_stream_readable.js:224:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:181:23) {
  name: 'SequelizeForeignKeyConstraintError',
  parent: Error: Cannot add or update a child row: a foreign key constraint fails (`autoparanaiba`.`tractor`, CONSTRAINT `fk_tractorXagricultural_machine` FOREIGN KEY (`tractor_id`) REFERENCES `agricultural_machine` (`agricultural_machine_id`) ON DELETE NO ACTION ON UPDATE N)
      at Packet.asError (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/packets/packet.js:708:17)
      at Execute.execute (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/commands/command.js:28:26)
      at Connection.handlePacket (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:408:32)
      at PacketParser.onPacket (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:70:12)
      at PacketParser.executeStart (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/packet_parser.js:75:16)
      at Socket.<anonymous> (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:77:25)
      at Socket.emit (events.js:223:5)
      at Socket.EventEmitter.emit (domain.js:475:20)
      at addChunk (_stream_readable.js:309:12)
      at readableAddChunk (_stream_readable.js:290:11)
      at Socket.Readable.push (_stream_readable.js:224:10)
      at TCP.onStreamRead (internal/stream_base_commons.js:181:23) {
    code: 'ER_NO_REFERENCED_ROW_2',
    errno: 1452,
    sqlState: '23000',
    sqlMessage: 'Cannot add or update a child row: a foreign key constraint fails (`autoparanaiba`.`tractor`, CONSTRAINT `fk_tractorXagricultural_machine` FOREIGN KEY (`tractor_id`) REFERENCES `agricultural_machine` (`agricultural_machine_id`) ON DELETE NO ACTION ON UPDATE N)',
    sql: 'INSERT INTO `tractor` (`tractor_id`,`traction_id`,`power_id`,`fuel_id`) VALUES (?,?,?,?);',
    parameters: [ 1, 1, 1, 1 ]
  },
  original: Error: Cannot add or update a child row: a foreign key constraint fails (`autoparanaiba`.`tractor`, CONSTRAINT `fk_tractorXagricultural_machine` FOREIGN KEY (`tractor_id`) REFERENCES `agricultural_machine` (`agricultural_machine_id`) ON DELETE NO ACTION ON UPDATE N)
      at Packet.asError (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/packets/packet.js:708:17)
      at Execute.execute (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/commands/command.js:28:26)
      at Connection.handlePacket (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:408:32)
      at PacketParser.onPacket (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:70:12)
      at PacketParser.executeStart (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/packet_parser.js:75:16)
      at Socket.<anonymous> (/home/vagnerwentz/Documents/freelance/autoparanaiba-api/node_modules/mysql2/lib/connection.js:77:25)
      at Socket.emit (events.js:223:5)
      at Socket.EventEmitter.emit (domain.js:475:20)
      at addChunk (_stream_readable.js:309:12)
      at readableAddChunk (_stream_readable.js:290:11)
      at Socket.Readable.push (_stream_readable.js:224:10)
      at TCP.onStreamRead (internal/stream_base_commons.js:181:23) {
    code: 'ER_NO_REFERENCED_ROW_2',
    errno: 1452,
    sqlState: '23000',
    sqlMessage: 'Cannot add or update a child row: a foreign key constraint fails (`autoparanaiba`.`tractor`, CONSTRAINT `fk_tractorXagricultural_machine` FOREIGN KEY (`tractor_id`) REFERENCES `agricultural_machine` (`agricultural_machine_id`) ON DELETE NO ACTION ON UPDATE N)',
    sql: 'INSERT INTO `tractor` (`tractor_id`,`traction_id`,`power_id`,`fuel_id`) VALUES (?,?,?,?);',
    parameters: [ 1, 1, 1, 1 ]
  },
  sql: 'INSERT INTO `tractor` (`tractor_id`,`traction_id`,`power_id`,`fuel_id`) VALUES (?,?,?,?);',
  parameters: [ 1, 1, 1, 1 ],
  fields: [ 'tractor_id' ],
  table: 'agricultural_machine',
  value: 1,
  index: 'fk_tractorXagricultural_machine',
  reltype: 'child'
}

标签: mysqlnode.jsmariadbsequelize.js

解决方案


推荐阅读