it-swarm.com.ru

Как заставить Sequelize использовать имена таблиц в единственном числе

У меня есть модель с именем User, но Sequelize ищет таблицу USERS всякий раз, когда я пытаюсь сохранить в БД. Кто-нибудь знает, как настроить Sequelize для использования имен таблиц в единственном числе? Благодарю.

89
user3152350

docs заявляет, что вы можете использовать свойство 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'
})
182

Хотя принятый ответ верен, вы можете сделать это один раз для всех таблиц, вместо того, чтобы делать это отдельно для каждой таблицы. Вы просто передаете похожий объект параметров в конструктор 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:[email protected]:3306/mydatabase', opts)

Теперь, когда вы определяете свои сущности, вам не нужно указывать freezeTableName: true:

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