Plugin Entity Registration
Register custom database entities from plugins.
Dynamic Entity Registrationโ
Plugins can add entities to the Gauzy schema without modifying core code:
import { TypeOrmModule } from "@nestjs/typeorm";
import { MikroOrmModule } from "@mikro-orm/nestjs";
@Module({
imports: [
TypeOrmModule.forFeature([MyPluginEntity]),
MikroOrmModule.forFeature([MyPluginEntity]),
],
providers: [MyPluginService],
})
export class MyPluginModule {}
Defining Plugin Entitiesโ
import { MultiORMEntity, MultiORMColumn, MultiORMManyToOne } from "@gauzy/core";
import { TenantOrganizationBaseEntity } from "@gauzy/core";
@MultiORMEntity("my_plugin_data")
export class MyPluginEntity extends TenantOrganizationBaseEntity {
@MultiORMColumn()
name: string;
@MultiORMColumn({ nullable: true })
description?: string;
@MultiORMManyToOne(() => Employee)
employee?: Employee;
@MultiORMColumn({ nullable: true })
employeeId?: string;
}
Migration for Plugin Entitiesโ
Generate a migration for the new entity:
yarn typeorm migration:generate -n AddMyPluginTable
This creates:
export class AddMyPluginTable1709635260000 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
CREATE TABLE "my_plugin_data" (
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
"tenantId" uuid NOT NULL,
"organizationId" uuid NOT NULL,
"name" varchar NOT NULL,
"description" varchar,
"employeeId" uuid,
PRIMARY KEY ("id")
)
`);
}
async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "my_plugin_data"`);
}
}
Related Pagesโ
- Plugin Dev Quickstart โ getting started
- Plugin Lifecycle โ lifecycle hooks
- Entity Inheritance โ base entities