【问题标题】:Create Intermediate BaseModel Class for Sequelize为 Sequelize 创建中间 BaseModel 类
【发布时间】:2021-06-23 13:49:04
【问题描述】:

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

我有一个简单的用户类。

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

}
export default User;

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

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

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

在 PHP 中类似于 static

【问题讨论】:

    标签: javascript node.js inheritance static sequelize.js


    【解决方案1】:

    这里是如何做到的:

    抽象(父)类:

    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
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2020-09-12
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      相关资源
      最近更新 更多