gpt4 book ai didi

javascript - 为 Sequelize 创建中间 BaseModel 类

转载 作者:行者123 更新时间:2023-12-05 06:48:31 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com