Слушатели и подписчики сущностей
Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
Что такое слушатель сущности?
Любая ваша сущность может содержать методы с пользовательской логикой, которые отслеживают определённые события сущности. Эти методы должны быть помечены специальными декораторами в зависимости от события, которое вы хотите отслеживать.
Примечание: Не выполняйте запросы к базе данных внутри слушателя, вместо этого используйте подписчиков.
@AfterLoad
Вы можете определить метод с любым именем в сущности и пометить его @AfterLoad.
TypeORM будет вызывать его каждый раз при загрузке сущности
через QueryBuilder или методы find репозитория/менеджера.
Пример:
@Entity()
export class Post {
@AfterLoad()
updateCounters() {
if (this.likesCount === undefined) this.likesCount = 0
}
}
@BeforeInsert
Вы можете определить метод с любым именем в сущности и пометить его @BeforeInsert.
TypeORM будет вызывать его перед вставкой сущности через save репозитория/менеджера.
Пример:
@Entity()
export class Post {
@BeforeInsert()
updateDates() {
this.createdDate = new Date()
}
}
@AfterInsert
Вы можете определить метод с любым именем в сущности и пометить его @AfterInsert.
TypeORM будет вызывать его после вставки сущности через save репозитория/менеджера.
Пример:
@Entity()
export class Post {
@AfterInsert()
resetCounters() {
this.counters = 0
}
}
@BeforeUpdate
Вы можете определить метод с любым именем в сущности и пометить его @BeforeUpdate.
TypeORM будет вызывать его перед обновлением существующей сущности через save репозитория/менеджера. Учтите, что это происходит только при изменении данных модели. Если вы выполните save без изменений, @BeforeUpdate и @AfterUpdate не сработают.
Пример:
@Entity()
export class Post {
@BeforeUpdate()
updateDates() {
this.updatedDate = new Date()
}
}
@AfterUpdate
Вы можете определить метод с любым именем в сущности и пометить его @AfterUpdate.
TypeORM будет вызывать его после обновления существующей сущности через save репозитория/менеджера.
Пример:
@Entity()
export class Post {
@AfterUpdate()
updateCounters() {
this.counter = 0
}
}
@BeforeRemove
Вы можете определить в сущности метод с любым именем и пометить его @BeforeRemove,
и TypeORM вызовет его перед удалением сущности с помощью remove из репозитория/менеджера.
Пример:
@Entity()
export class Post {
@BeforeRemove()
updateStatus() {
this.status = "removed"
}
}
@AfterRemove
Вы можете определить метод с любым именем в сущности и пометить его @AfterRemove.
TypeORM будет вызывать его после удаления сущности через remove репозитория/менеджера.
Пример:
@Entity()
export class Post {
@AfterRemove()
updateStatus() {
this.status = "removed"
}
}