如何使用 sequelize-typescript 从单个字段中引用多个模型?
Posted
技术标签:
【中文标题】如何使用 sequelize-typescript 从单个字段中引用多个模型?【英文标题】:how do i reference multiple models from a single field with sequelize-typescript? 【发布时间】:2019-03-19 18:11:42 【问题描述】:我希望将来有多个Address
用于Person
、Location
或Place
以及可能的其他实体类型。我想在我的Address
模型上有一个字段,它指向与地址相关的任何事物的id
,而不必在每个@ 上都有personId
和locationId
和placeId
等... 987654331@ 当他们只使用其中一个时。
我的表结构如下:
addresses.entityId => people.id | locations.id | places.id
如何在sequelize-typescript 中使用@ForeignKey
进行建模?
我的模型如下所示:
@Table
class Address extends Model<Address>
@Column(
type: DataType.UUID,
allowNull: false,
primaryKey: true,
unique: true,
defaultValue: DataType.UUIDV4
)
id: string;
@ForeignKey // ... ??
entityId: string;
@Table
class Person extends Model<Person>
@Column(
type: DataType.UUID,
allowNull: false,
primaryKey: true,
unique: true,
defaultValue: DataType.UUIDV4
)
id: string;
@Table
class Location extends Model<Location>
@Column(
type: DataType.UUID,
allowNull: false,
primaryKey: true,
unique: true,
defaultValue: DataType.UUIDV4
)
id: string;
@Table
class Place extends Model<Place>
@Column(
type: DataType.UUID,
allowNull: false,
primaryKey: true,
unique: true,
defaultValue: DataType.UUIDV4
)
id: string;
【问题讨论】:
【参考方案1】:在 Sequelize Typescript 的这种情况下,可以多次给出自定义装饰器,所以如果你想将列引用到多个模型,那么你可以像我给出的 sn-p 一样多次给出 @ForeignKey。 你可以这样做:
@Table
class Address extends Model<Address>
@Column(
type: DataType.UUID,
allowNull: false,
primaryKey: true,
unique: true,
defaultValue: DataType.UUIDV4
)
id: string;
@ForeignKey(() => Person)
@ForeignKey(() => Location)
@ForeignKey(() => Place)
@Column()
public entityId: string;
参考: Sequelize Typescript Documentation
【讨论】:
以上是关于如何使用 sequelize-typescript 从单个字段中引用多个模型?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Sequelize-Typescript 模型定义指定 NestJs 控制器的返回类型?
sequelize-typescript - 当使用带有 `tsc` 编译器(带有 NestJS)的 glob 配置时,无法解析模型模块
Node.js 和 sequelize-typescript - 数据访问对象和业务对象
sequelize-typescript:模型中get()的通用方法
Sequelize-typescript 'HasManyCreateAssociationMixin' 不是函数
sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组