Sequelize 表名更改

8

我已经在MySQL数据库中将一张表从users重命名为user。在Express中,我正在运行Sequelize并为旧的users表创建了一个架构。随着表格的重命名和所有代码从users更改为user,尽管模式中的表名已更新,但Sequelize仍然在寻找一个特定命名为users的表。

User = db.sequelize.define('user', {
  first_name: Sequelize.STRING,
  last_name: Sequelize.STRING,
  email: Sequelize.STRING,
  password: Sequelize.STRING,
  role: Sequelize.STRING,
  created_at: Sequelize.DATE,
  updated_at: Sequelize.DATE
});

尝试运行以下代码,用由Sequelize生成的表格覆盖原有表格,但仍然创建了一个名为users的表格。

User.sync({force: true}).then(() => {
  // Table created
  return User.create({
    firstName: 'test',
    lastName: 'test',
    email: 'test@example.com',
    password: 'password'
  });
});

有其他人也遇到相同的问题吗?我是否缺少其他配置?这就是我在创建第一个表时所做的全部操作。


1
这个回答解决了你的问题吗?如何让Sequelize使用单数表名 - Rafael Tavares
3个回答

14

Sequelize默认对表名进行复数化处理,设置freezeTableName: true可以改变此行为。

User = db.sequelize.define('user', {
    first_name: Sequelize.STRING,
    last_name: Sequelize.STRING,
    email: Sequelize.STRING,
    password: Sequelize.STRING,
    role: Sequelize.STRING,
    created_at: Sequelize.DATE,
    updated_at: Sequelize.DATE
}, {
    freezeTableName: true
});

感谢您的回答。我是nodeJS的新手,并花了很多时间来确定sequelize的问题所在。非常感谢。 - Mr. Noddy

2

1
最近的 Sequelize 版本允许你这样做。
up: async (queryInterface, Sequelize) => queryInterface.showAllTables().then(async (tables) => {any function})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接