表建模

模型是一个扩展 Sequelize.Model 的类. 模型可以用两种等效方式定义. 第一个是Sequelize.Model.init(属性,参数):

  1. const Model = Sequelize.Model;
  2. class User extends Model {}
  3. User.init({
  4. // 属性
  5. firstName: {
  6. type: Sequelize.STRING,
  7. allowNull: false
  8. },
  9. lastName: {
  10. type: Sequelize.STRING
  11. // allowNull 默认为 true
  12. }
  13. }, {
  14. sequelize,
  15. modelName: 'user'
  16. // 参数
  17. });

另一个是使用 sequelize.define:

  1. const User = sequelize.define('user', {
  2. // 属性
  3. firstName: {
  4. type: Sequelize.STRING,
  5. allowNull: false
  6. },
  7. lastName: {
  8. type: Sequelize.STRING
  9. // allowNull 默认为 true
  10. }
  11. }, {
  12. // 参数
  13. });

在内部, sequelize.define 调用 Model.init.

上面的代码告诉 Sequelize 在数据库中期望一个名为 users 的表,其中包含 firstNamelastName 字段. 默认情况下,表名自动复数(在当下使用inflection 库来执行此操作).通过使用 freezeTableName:true 参数可以为特定模型停止此行为,或者通过使用Sequelize构造函数中的 define 参数为所有模型停止此行为.

Sequelize 还默认为每个模型定义了字段id(主键),createdAtupdatedAt. 当然也可以更改此行为(请查看API参考以了解有关可用参数的更多信息).

更改默认模型参数

Sequelize 构造函数采用 define 参数,它将更改所有已定义模型的默认参数.

  1. const sequelize = new Sequelize(connectionURI, {
  2. define: {
  3. // `timestamps` 字段指定是否将创建 `createdAt` 和 `updatedAt` 字段.
  4. // 该值默认为 true, 但是当前设定为 false
  5. timestamps: false
  6. }
  7. });
  8. // 这里 `timestamps` 为 false,因此不会创建 `createdAt` 和 `updatedAt` 字段.
  9. class Foo extends Model {}
  10. Foo.init({ /* ... */ }, { sequelize });
  11. // 这里 `timestamps` 直接设置为 true,因此将创建 `createdAt` 和 `updatedAt` 字段.
  12. class Bar extends Model {}
  13. Bar.init({ /* ... */ }, { sequelize, timestamps: true });

你可以在Model.init API 参考sequelize.define API 参考 中阅读有关创建模型的更多信息.