模型配置项
先了解一下配置项,关于 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
文件。
- 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
})
}
- 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 可以传入路径,也可以传定义函数。
当前内容版权归 nodelover.me 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 nodelover.me .