优先使用内置
在为用户、分支、合作方、货币、标签、通知或媒体新建表之前,先从 shared-backend-core 导入对应实体(及其服务)。仅在领域特有数据时再定义自己的表。
- 从 @quan-erp/shared-backend-core 导入实体
- 所有实体继承 BaseEntity
- 用 ManyToOne + JoinColumn 关联;关系类型使用 InstanceType<typeof EntityName>
领域
- BaseEntity — 创建/更新/软删除/版本列
- Identity — UserEntity、RoleEntity、BranchEntity
- Partner — PartnerEntity 与收货地址
- Currency — CurrencyEntity、CurrencyExchangeRateEnity
- Units — UnitCategoryEntity、UnitEntity、换算
- Operations — NotifcationEntity、AuditLogEntity、TagEntity
- Config — SettingEntity、EnvEntity、DeveloperConfigEntity
- Plugins — PluginEntity、PluginRouteEntity、DataSeedHistoryEntity
- Files — FileEntity
从插件实体关联
用 TypeORM 关系引用核心实体。关系类型建议用 InstanceType<typeof …>,避免循环依赖问题。
TSXjoin User + Branch
1import {
2 BaseEntity,
3 BranchEntity,
4 UserEntity,
5} from "@quan-erp/shared-backend-core";
6import {
7 Column,
8 Entity,
9 JoinColumn,
10 ManyToOne,
11 PrimaryGeneratedColumn,
12} from "typeorm";
13import metadata from "../../../../module.metadata.json" with { type: "json" };
14
15@Entity(`${metadata.name}_order`)
16export class OrderEntity extends BaseEntity {
17 @PrimaryGeneratedColumn()
18 id: number;
19
20 @ManyToOne(() => UserEntity)
21 @JoinColumn({ name: "userId" })
22 user: InstanceType<typeof UserEntity>;
23
24 @Column()
25 userId: number;
26
27 @ManyToOne(() => BranchEntity)
28 @JoinColumn({ name: "branchId" })
29 branch: InstanceType<typeof BranchEntity>;
30
31 @Column()
32 branchId: number;
33}你的插件表
需要领域表时,定义 TypeORM 实体(以 metadata.name 为前缀,继承 BaseEntity),在模块中以 plugin: "default" 注册,并用迁移演进 schema。详见 Database 与 Migrations。