如何在NestJS中使用TypeORM创建触发器?

3

在nestjs/typeorm中有没有创建触发器的方法?这个触发器应该:

  1. 每当更新该行时自动递增一个列
  2. 即使直接在mysql数据库中操作也能正常工作

顺便提一下,@nestjs/typeorm 没有这方面的抽象层。它只是 TypeORM。 - Micael Levi
我是初学者,一点都不懂。你能帮我解决这个问题吗? - Open Wings Infotech
你可以搜索“typeorm触发器”,我以前没有写过类似的东西。 - Micael Levi
2个回答

3

我不知道@nestjs/typeorm是否具有该功能,但是核心typeorm软件包可以直接支持触发器。

您可以尝试使用核心typeorm软件包的以下代码:

@EventSubscriber()
export class PostSubscriber implements EntitySubscriberInterface {
 
    /**
     * Called before entity update.
     */
    beforeUpdate(event: UpdateEvent<any>) {
        console.log(`BEFORE ENTITY UPDATED: `, event.entity)
        manager.update(YourEntity, { yourColumn : value })
    }

    /**
     * Called after entity update.
     */
    afterUpdate(event: UpdateEvent<any>) {
        console.log(`AFTER ENTITY UPDATED: `, event.entity)
    }

   
}

事件对象包含以下内容:
  • dataSource: DataSource - 事件中使用的数据源。
  • queryRunner: QueryRunner - 事件事务中使用的QueryRunner。
  • manager: EntityManager - 事件事务中使用的EntityManager。
注意:所有订阅事件监听器中的数据库操作都应该使用事件对象的queryRunner或manager实例执行。
您可以在https://typeorm.io/listeners-and-subscribers#what-is-a-subscriber上进一步了解此内容。
请告诉我这是否解决了您的问题。

这种方法不满足我的第二个要求 :( @Afaq Javed - Open Wings Infotech

-2

我通过在MySQL中显式创建触发器来解决了这个问题。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接