javascript - 为 Sequelize 创建中间 BaseModel 类

标签 javascript node.js inheritance static sequelize.js

我正在使用 Sequelize 作为数据 ORM。

我有一个简单的用户类。

import { Model } from "sequelize";
class User extends BaseModel {

}
export default User;

我可以像这样使用用户类 User.findByPk(1) Sequelize findByPk

我想要的是一个 BaseModel 类,它将扩展 Sequelize Model 类,以便我可以在 BaseClass 中放置一些常用方法。

例如:我不想使用 findByPk,而是想在 BaseModel 中定义 find 方法,它将调用 Inherited 类上的 findByPk,但我找不到任何解决方案来在父类中获取子引用。

类似于 PHP 中的 static

最佳答案

这里是你如何做到的:

抽象(父)类:

import { Model } from "sequelize";

export default abstract class BaseModel <T,U>
    extends Model<T,U>
{

    protected myMethod(){}

}

用户(子)类:

import { DataTypes, Model, Optional } from 'sequelize'
import { sequelizeConnection } from "../helpers/databaseHelper"
import BaseModel from "../models/BaseModel";

interface UserAttributes {
    id: number;
    createdAt?: Date;
    updatedAt?: Date;
    deletedAt?: Date;
}
export interface UserInput extends Optional<UserAttributes, "id"> {}

export default 
class User<T=UserAttributes,U=UserInput> // <-- Pass the same generic construction as AbstractModel
extends BaseModel <T,U>  // <-- Here the trick
implements UserAttributes{

    public id!: number; 
    public name!: string;

    // timestamps!
    public readonly createdAt!: Date;
    public readonly updatedAt!: Date;
    public readonly deletedAt!: Date;

}
User.init({
    id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
    },
// Your attributes
},
 {
    timestamps: true,
    sequelize: sequelizeConnection,
    paranoid: true
})

关于javascript - 为 Sequelize 创建中间 BaseModel 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66821909/

相关文章:

c# - 抽象类和 Fluent Nhibernate

javascript - 如何将一个类从一个文件嵌入到另一个文件?

c++ - 使用内部类型作为模板参数继承模板类

javascript - 我无法从移动设备上的输入中写入任何值

javascript - es6 模板文字是否可以防止 sql 注入(inject)?

javascript - Node 请求如何处理 session

node.js - Express 服务器未在我的 React 生产版本上运行

c++ - 在 C++ 中如何继承父类的非成员函数,这些函数只是在文件中定义?

javascript - Dexie:两个日期之间的事件

javascript - 加载大量数据时防止 "Stop running script"