扩展模型

Sequelize 模型是ES6类. 你可以轻松添加自定义实例或类级别的方法.

  1. class User extends Model {
  2. // 添加一个类级别的方法
  3. static classLevelMethod() {
  4. return 'foo';
  5. }
  6. // 添加实例级别方法
  7. instanceLevelMethod() {
  8. return 'bar';
  9. }
  10. }
  11. User.init({ firstname: Sequelize.STRING }, { sequelize });

当然,你还可以访问实例的数据并生成虚拟的getter:

  1. class User extends Model {
  2. getFullname() {
  3. return [this.firstname, this.lastname].join(' ');
  4. }
  5. }
  6. User.init({ firstname: Sequelize.STRING, lastname: Sequelize.STRING }, { sequelize });
  7. // 示例:
  8. User.build({ firstname: 'foo', lastname: 'bar' }).getFullname() // 'foo bar'

索引

Sequelize支持在 Model.sync()sequelize.sync 中创建的模型定义中添加索引.

  1. class User extends Model {}
  2. User.init({}, {
  3. indexes: [
  4. // 在 email 上创建一个唯一索引
  5. {
  6. unique: true,
  7. fields: ['email']
  8. },
  9. // 在使用 jsonb_path_ops 的 operator 数据上创建一个 gin 索引
  10. {
  11. fields: ['data'],
  12. using: 'gin',
  13. operator: 'jsonb_path_ops'
  14. },
  15. // 默认的索引名将是 [table]_[fields]
  16. // 创建多列局部索引
  17. {
  18. name: 'public_by_author',
  19. fields: ['author', 'status'],
  20. where: {
  21. status: 'public'
  22. }
  23. },
  24. // 具有有序字段的BTREE索引
  25. {
  26. name: 'title_index',
  27. using: 'BTREE',
  28. fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
  29. }
  30. ],
  31. sequelize
  32. });