配置

你还可以修改 Sequelize 处理列名称的方式:

  1. class Bar extends Model {}
  2. Bar.init({ /* bla */ }, {
  3. // 模型的名称. 该模型将以此名称存储在`sequelize.models`中.
  4. // 在这种情况下,默认为类名,即Bar.
  5. // 这将控制自动生成的foreignKey和关联命名的名称
  6. modelName: 'bar',
  7. // 不添加时间戳属性 (updatedAt, createdAt)
  8. timestamps: false,
  9. // 不删除数据库条目,但将新添加的属性deletedAt设置为当前日期(删除完成时).
  10. // paranoid 只有在启用时间戳时才能工作
  11. paranoid: true,
  12. // 将自动设置所有属性的字段参数为下划线命名方式.
  13. // 不会覆盖已经定义的字段选项
  14. underscored: true,
  15. // 禁用修改表名; 默认情况下,sequelize将自动将所有传递的模型名称(define的第一个参数)转换为复数. 如果你不想这样,请设置以下内容
  16. freezeTableName: true,
  17. // 定义表的名称
  18. tableName: 'my_very_custom_table_name',
  19. // 启用乐观锁定. 启用时,sequelize将向模型添加版本计数属性,
  20. // 并在保存过时的实例时引发OptimisticLockingError错误.
  21. // 设置为true或具有要用于启用的属性名称的字符串.
  22. version: true,
  23. // Sequelize 实例
  24. sequelize,
  25. })

如果你希望sequelize处理时间戳,但只想要其中一部分,或者希望你的时间戳被称为别的东西,则可以单独覆盖每个列:

  1. class Foo extends Model {}
  2. Foo.init({ /* bla */ }, {
  3. // 不要忘记启用时间戳!
  4. timestamps: true,
  5. // 我不想要 createdAt
  6. createdAt: false,
  7. // 我想 updateAt 实际上被称为 updateTimestamp
  8. updatedAt: 'updateTimestamp',
  9. // 并且希望 deletedA t被称为 destroyTime(请记住启用paranoid以使其工作)
  10. deletedAt: 'destroyTime',
  11. paranoid: true,
  12. sequelize,
  13. })

你也可以更改数据库引擎,例如 变更到到MyISAM, 默认值是InnoDB.

  1. class Person extends Model {}
  2. Person.init({ /* attributes */ }, {
  3. engine: 'MYISAM',
  4. sequelize
  5. })
  6. // 或全局的
  7. const sequelize = new Sequelize(db, user, pw, {
  8. define: { engine: 'MYISAM' }
  9. })

最后,你可以为MySQL和PG中的表指定注释

  1. class Person extends Model {}
  2. Person.init({ /* attributes */ }, {
  3. comment: "我是一个表注释!",
  4. sequelize
  5. })