如何使Sequelize使用单表名称


109

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


3
user是保留字,如果您确实尝试使用该名称创建表,则会遇到很多问题。
a_horse_with_no_name 2014年

1
user不是保留字,而是关键字。虽然使用它不会遇到问题,但最好避免使用它。dev.mysql.com/doc/refman/5.5/en/keywords.html
2015年

Answers:


224

文件指出,你可以使用属性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'
})

2
我已更新您问题中的链接,因为该链接已损坏,希望您不要介意!
Maria Ines Parnisari'8

1
freezeTableName: true在最新版本的sequelize中不起作用。还有其他解决方案吗?
穆罕默德·亚西尔

2
缺点之一freezeTableName它还防止sqlz降低表名和列名的大小写。这意味着以后,当您手写SQL来挖掘数据时,您必须应对大小写混合的名称(无论对方言意味着什么)。在pg上,这意味着必须在每个大小写混合的名称周围都使用双引号-yuk!我希望我们可以选择取消复数形式,但保留大小写折叠... definetableName显式覆盖的选项。
汤姆(Tom),

1
freezeTableName: true除了使用modelName: 'singularName'
Naor Levi

97

虽然已接受的答案是正确的,但是您可以对所有表执行一次此操作,而不必为每个表分别执行一次。您只需将类似的options对象传递到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
})

3
感谢您的注意,这里是有兴趣者的文档链接
ozanmuyes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.