【问题标题】:Common columns for all entity in nestjsNestjs中所有实体的公共列
【发布时间】:2020-01-23 21:57:33
【问题描述】:

假设有不同的实体用户、角色、任务

所有这些实体都有createdByupdatedBycreatedOnupdatedOn 的共同点。

我想知道如何创建一个基实体,以便所有实体都使用 Typeform 扩展嵌套 js 中的基类。

【问题讨论】:

    标签: nestjs typeorm


    【解决方案1】:

    这是你应该使用继承的地方。
    基本上,这个想法是有一个基类/实体,它收集公共逻辑或结构,而许多其他类/实体共享该公共逻辑。

    例如: 猫、狗、大象都有相似的特征,所以我们可能希望将所有这些相似的特征集中在一个地方,以避免逻辑和代码的重复。

    所以让我们看一个最简单的例子,只是为了基本理解。

    export class Animal {
        protected numberOfLegs: number;
        protected sound(): void;
    }
    
    export class Dog extends Animal {
        constructor() {
           super();
           this.numberOfLegs = 4;
        }
    
        sound(): void {
            console.log('BARK');
        }
    }
    

    满足您的需求:

    导出基础实体。

    import { Entity, Column } from 'typeorm';
    
    export class BaseEntity {
        @Column()
        createdBy: string;
    
        @Column()
        updatedBy: string;
    
        @Column()
        createdOn: Date;
    
        @Column()
        updatedOn: Date;
    }
    

    然后从派生实体继承它。

    import { Entity, Column } from 'typeorm';
    import {BaseEntity} from './base-entity';
    
    export class DerivedEntity extends BaseEntity {
        @Column()
        id: string;
    
        ...
    }
    

    请阅读继承,这是编程和 OOP 中基本且非常重要的原则。

    【讨论】:

    • 我怀疑这段代码会在我的数据库中创建一个基本实体表,每个字段都会有这个列对吗?
    • BaseEntity 删除@Entity 装饰将避免创建BaseEntity 表。编辑了帖子
    • 是的,但我仍然被困在一个地方createdByupdatedBy 是用户表的外键,所以我必须保持ForeignKeyuser 的关系吗?跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2012-03-19
    • 2018-01-17
    • 1970-01-01
    • 2020-08-04
    • 2011-10-07
    • 2023-03-03
    相关资源
    最近更新 更多