【发布时间】:2019-04-15 07:54:29
【问题描述】:
我的Post 实体中有一个@BeforeInsert() 监听器。侦听器应该在插入之前为 slug 列创建一个唯一的 slug。
例如:
export class Post extends BaseEntity {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
slug: string
@BeforeInsert()
private updateSlug() {
this.slug = slugify(this.title)
// I will need to access the database to check whether the same slug has existsed already or not.
// How do I access the database in this listener method?
}
}
由于slug 列应该是唯一的,我必须检查数据库以了解是否已经存在相同的 slug。如果 slug 已经存在,那么我需要在 slug 后面附加一个数字,例如 hello-word-1。
但是,为此,我需要先访问Post 实体类中实体的Post 存储库,然后才能访问数据库。但我不知道如何将存储库注入到我的Post 实体类中以访问数据库。
我应该如何解决这个问题?
【问题讨论】:
-
您不应该从您的实体访问存储库,但您可以在自定义存储库中提供一个 API 来执行您需要的操作,因为您可以从那里获取实体管理器。然后,您只需在需要时从代码库中调用存储库。在插入之前检查 slug 在我看来为时已晚,这是您应该事先做的事情。
标签: javascript node.js typescript nestjs typeorm