如何让Sequelize使用单数表名

问题描述 投票:0回答:5

我有一个名为 User 的模型,但每当我尝试保存在数据库中时,Sequelize 都会查找表 USERS。有谁知道如何设置 Sequelize 使用单数表名?谢谢。

mysql sql node.js sequelize.js
5个回答
287
投票

文档声明您可以使用该属性

freezeTableName

请看这个例子:

var Bar = sequelize.define('Bar', { /* bla */ }, {
  // don't add the timestamp attributes (updatedAt, createdAt)
  timestamps: false,

  // don't delete database entries but set the newly added attribute deletedAt
  // to the current date (when deletion was done). paranoid will only work if
  // timestamps are enabled
  paranoid: true,

  // don't use camelcase for automatically added attributes but underscore style
  // so updatedAt will be updated_at
  underscored: true,

  // disable the modification of tablenames; By default, sequelize will automatically
  // transform all passed model names (first parameter of define) into plural.
  // if you don't want that, set the following
  freezeTableName: true,

  // define the table's name
  tableName: 'my_very_custom_table_name'
})

115
投票

虽然接受的答案是正确的,但您可以对所有表执行一次此操作,而不必为每个表单独执行此操作。您只需将类似的选项对象传递到 Sequelize 构造函数中,如下所示:

var Sequelize = require('sequelize');

//database wide options
var opts = {
    define: {
        //prevent sequelize from pluralizing table names
        freezeTableName: true
    }
}

var sequelize = new Sequelize('mysql://root:123abc@localhost:3306/mydatabase', opts)

现在,当您定义实体时,您不必指定

freezeTableName: true
:

var Project = sequelize.define('Project', {
    title: Sequelize.STRING,
    description: Sequelize.TEXT
})

17
投票

您可以直接执行,而不是在每个已定义一次的表中指定 像下面这样

var db_instance = new Sequelize(config.DB.database, config.DB.username, config.DB.password, {
  host: config.DB.host,
  dialect: config.DB.dialect,
  define: {
    timestamps: true,
    freezeTableName: true
  },
  logging: false
});  

您也可以直接告诉 Sequelize 表的名称:

sequelize.define('User', {
  // ... (attributes)
}, {
  tableName: 'Employees'
});

您可以在sequelize.js的文档中看到这两个方法

文档。与

freezeTableName

相关的sequelize.js

8
投票

如果您需要为单数和复数定义使用不同的模型名称,您可以在模型选项中将名称作为参数传递。

请看这个例子:

    const People = sequelize.define('people', {
    name: DataTypes.STRING,
}, {
    hooks: {
        beforeCount (options) {
            options.raw = true;
        }
    },
    tableName: 'people',
    name: {
        singular: 'person',
        plural: 'people'
    }
});

当查询单个记录时,这将返回“person”作为对象;当我们获取多个记录时,这将返回“people”作为数组。


0
投票
import {Model, Sequelize, DataTypes} from 'sequelize';
import {IUser} from "../model/IUser";


module.exports = (sequelize: Sequelize) => {
  class User extends Model<IUser> implements IUser {

    public email!: string;
    public password!: string;
    static associate(models: any) {
      // define association here
    }
  }
  User.init({
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      primaryKey: true
    },
    password: {
      type:DataTypes.STRING,
      allowNull: false
    },

  }, {
    sequelize,
    modelName: 'user',
    tableName: 'your_table_name'
  });
  return User;
};
© www.soinside.com 2019 - 2024. All rights reserved.