Sequelize 查询单数而不是复数表名

Tho*_*uet 2 api postgresql node.js sequelize.js

我有一个问题,我找不到任何可以解决它的东西。我正在使用sequelize 和graphql 在nodeJS 中创建API。数据库使用PostgresQL。

所以我有两个模型:模拟和数据。它们位于模拟和数据两个表中。它们之间的关系是一种模拟对多种数据的关系。

问题是这样的:当我使用模拟(例如:)进行查询时Simulation.findAll(),它可以正常工作,查询“模拟”,但使用数据时,它会查询“数据”表,而不是“数据”。我真正不明白的是,我的两个模型的代码几乎相同。

这是模拟模型:

module.exports = (sequelize, DataTypes) => {
  const Simulation = sequelize.define('Simulation', {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: DataTypes.INTEGER,
    },
    name: {
      type: DataTypes.STRING,
      allowNull: false,
    },
  });

  Simulation.associate = function(models) {
    Simulation.hasMany(models.Data, {
      foreignKey: 'SimulationId',
    })
  };

  return Simulation;
};
Run Code Online (Sandbox Code Playgroud)

这是数据模型:

module.exports = (sequelize, DataTypes) => {
  const Data = sequelize.define('Data', {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: DataTypes.INTEGER,
    },
    name: {
      type: DataTypes.STRING,
      allowNull: false
    },
    content: {
      type: DataTypes.TEXT,
      allowNull: false
    },
    SimulationId: {
      allowNull: false,
      type: DataTypes.INTEGER,
    },
  });

  Data.associate = function(models) {
    Data.belongsTo(models.Simulation, {
      foreignKey: 'SimulationId',
      targetKey: 'id',
      allowNull: false,
      onDelete: 'CASCADE'
    });
  };
  return Data;
};
Run Code Online (Sandbox Code Playgroud)

这是迁移文件:

模拟

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Simulations', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Simulations');
  }
};
Run Code Online (Sandbox Code Playgroud)

数据

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Datas', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING,
        allowNull: false
      },
      content: {
        type: Sequelize.TEXT,
        allowNull: false
      },
      SimulationId: {
        allowNull: false,
        type: Sequelize.INTEGER,
        onDelete: 'CASCADE',
        references: {
          model: 'Simulation',
          key: 'id',
          as: 'SimulationId',
        },
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Datas');
  }
};
Run Code Online (Sandbox Code Playgroud)

谢谢你帮助我:)

Gee*_*bey 5

您可以使用freezeTableName选项来设置您想要的任何模型名称,sequelize 不会使模型名称变为复数。