当前位置: 首页 > 文档资料 > Sequelize ORM 实践 >

2.3 导入与配置

优质
小牛编辑
118浏览
2023-12-01

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

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

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

通过文件导入模型

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

  1. phone.ts
import Sequelize from 'sequelize';

const S = Sequelize;

export interface PhoneAttributes {
  type: string;
  name: string;
}

export interface PhoneInstance extends Sequelize.Instance<PhoneAttributes> {
  id: number;
  createdAt: Date;
  updatedAt: Date;

  type: string;
  name: string;
}

export default function PhoneDefine(sequelize: Sequelize.Sequelize, dataTypes: Sequelize.DataTypes) {
  return sequelize.define<PhoneInstance, PhoneAttributes>('Phone', {
    type: dataTypes.STRING,
    name: dataTypes.STRING
  })
}
  1. index.ts
import PhoneDefine , { PhoneAttributes, PhoneInstance }  from './phone';

async function main() {
  try {
    // const Phone = sequelize.import<PhoneInstance, PhoneAttributes>('Phone', PhoneDefine);
    const Phone = sequelize.import<PhoneInstance, PhoneAttributes>('./phone');

    await Phone.sync()
    let phone = await Phone.create({name:"IPhone", type: "Apple"})
    console.log(phone);

  }catch(e){
    // console.log(e)
    if (e instanceof Sequelize.ValidationError) {
      console.log(e.message);
    }
  }
  process.exit(0)
}

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