web-dev-qa-db-fra.com

Comment faire en sorte que Sequelize utilise des noms de table singuliers

J'ai un modèle appelé User mais Sequelize cherche la table USERS à chaque fois que j'essaie de sauvegarder dans la base de données. Est-ce que quelqu'un sait comment configurer Sequelize pour utiliser des noms de table singuliers? Merci.

93
user3152350

Les docs indiquent que vous pouvez utiliser la propriété freezeTableName.

S'il vous plaît jeter un oeil à cet exemple:

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

Bien que la réponse acceptée soit correcte, vous pouvez le faire une fois pour toutes les tables plutôt que de devoir le faire séparément pour chacune d'elles. Vous passez simplement un objet options similaire dans le constructeur Sequelize, comme suit:

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)

Maintenant, lorsque vous définissez vos entités, vous n'avez pas à spécifier freezeTableName: true:

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