模型配置项

先了解一下配置项,关于 Scope 的,在后续的章节慢慢补充。define 的第三个参数就是模型的配置项,它的类型是DefineOptions接口,接口如下。

  1. defaultScope?: FindOptions;
  2. scopes?: DefineScopeOptions; // scopes 在后续的会有一个大的章节来说
  3. omitNull?: boolean; // 所有的字段都不能为空
  4. timestamps?: boolean; // 关闭时间戳字段
  5. paranoid?: boolean; // 软删除
  6. underscored?: boolean; // 数据库表字段单词分割改成下划线 createdAt -> created_at
  7. underscoredAll?: boolean; // 数据库模型单词改成下划线
  8. hasTrigger?: boolean; // 是否有相关的触发器
  9. freezeTableName?: boolean; // 让数据库表与模型保持一致,通常数据库表默认是英文复数
  10. name?: DefineNameOptions; // 对关联模型的一些配置
  11. indexes?: DefineIndexesOptions[]; // 添加索引
  12. createdAt?: string | boolean; // 创建时间戳
  13. deletedAt?: string | boolean; // 删除时间戳
  14. updatedAt?: string | boolean; // 更新时间戳
  15. tableName?: string; // 设置表名
  16. getterMethods?: DefineGetterMethodsOptions; // 设置对象的 getter 方法
  17. setterMethods?: DefineSetterMethodsOptions;
  18. instanceMethods?: Object; // 实例方法
  19. classMethods?: Object; // 静态方法
  20. engine?: string; // 设置表引擎
  21. charset?: string; // 字符集
  22. comment?: string; // 表注释
  23. collate?: string; // 校对集,跟排序相关的东西
  24. initialAutoIncrement?: string; // 自增的初始值
  25. hooks?: HooksDefineOptions<TInstance>; // 挂载模型的生命周期函数
  26. validate?: DefineValidateOptions; // 验证方法

软删除:不会真正的从数据库中删除某一行数据,只是用一个 deletedAt 字段来标识已经删除。

通过文件导入模型

通过文件导入模型,会用到实例方法import,首先新建一个phone.ts文件。

  1. phone.ts
  1. import Sequelize from 'sequelize';
  2. const S = Sequelize;
  3. export interface PhoneAttributes {
  4. type: string;
  5. name: string;
  6. }
  7. export interface PhoneInstance extends Sequelize.Instance<PhoneAttributes> {
  8. id: number;
  9. createdAt: Date;
  10. updatedAt: Date;
  11. type: string;
  12. name: string;
  13. }
  14. export default function PhoneDefine(sequelize: Sequelize.Sequelize, dataTypes: Sequelize.DataTypes) {
  15. return sequelize.define<PhoneInstance, PhoneAttributes>('Phone', {
  16. type: dataTypes.STRING,
  17. name: dataTypes.STRING
  18. })
  19. }
  1. index.ts
  1. import PhoneDefine , { PhoneAttributes, PhoneInstance } from './phone';
  2. async function main() {
  3. try {
  4. // const Phone = sequelize.import<PhoneInstance, PhoneAttributes>('Phone', PhoneDefine);
  5. const Phone = sequelize.import<PhoneInstance, PhoneAttributes>('./phone');
  6. await Phone.sync()
  7. let phone = await Phone.create({name:"IPhone", type: "Apple"})
  8. console.log(phone);
  9. }catch(e){
  10. // console.log(e)
  11. if (e instanceof Sequelize.ValidationError) {
  12. console.log(e.message);
  13. }
  14. }
  15. process.exit(0)
  16. }

import 可以传入路径,也可以传定义函数。