javascript - 为 Sequelize 创建中间 BaseModel 类
问题描述
我使用 Sequelize 作为数据 ORM。
我有一个简单的用户类。
import { Model } from "sequelize";
class User extends BaseModel {
}
export default User;
我可以像这样使用 User 类User.findByPk(1)
Sequelize findByPk
我想要的是一个 BaseModel 类,它将扩展 SequelizeModel
类,以便我可以在 BaseClass 中放置一些常用方法。
例如:我不想使用findByPk
,而是想find
在 BaseModel 中定义将调用findByPk
Inherited 类的方法,但我无法找到任何解决方案来获取 Parent 类中的子引用。
类似于static
PHP 中的东西。
解决方案
在这里你可以怎么做:
抽象(父)类:
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
})
推荐阅读
- html - HTML 表格中的 JavaScript 日期选择器
- excel - 如何用密码汇总文件夹中的excel文件
- python - 如何转换张量流模型并加载为 tfds
- java - 在登录测试中未在 SecurityContext 中找到 Authentication 对象
- java - 将数组的特定元素从一个数组移动到另一个不同大小的数组
- javascript - 如何使用 javascript 在 DOM 中添加 laravel 组件
- flutter - 如何在应用程序中显示数据列表?
- node.js - 如何在获取模块获取流中捕获无效的 url 错误?
- unity3d - ArgumentException:无法创建没有有效负载数据的数据处理程序
- c++ - C++ 不能使用带有类成员的模板模板类