排序查询单数而不是复数表名

时间:2018-12-19 10:02:58

标签: node.js postgresql api sequelize.js

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

因此,我有两个模型:仿真和数据。它们位于两个表Simulations和Datas中。它们之间的关系是对许多数据的一种模拟。

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

这是用于仿真的模型:

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;
};

这是数据模型:

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;
};

这是迁移文件:

模拟

'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');
  }
};

数据

'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');
  }
};

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

Sequelize自动使模型名称复数。为什么不将表称为“数据”实际上,它是单词“数据”的复数形式,因此可能是表的更好名称。

答案 1 :(得分:0)

您可以使用freezeTableName选项设置所需的模型名称,后缀化不会使模型名称复数。