具有各自继承类的POST方法

问题描述 投票:0回答:1

如何在该方法中节省餐费? 在服务(expenses.service.ts)中识别它的方法如下,但是当我尝试保存它时,它会像费用(父实体)一样保存。

async create(expense: ExpenseDto) { 
    let newExpense = new Meal();
    newExpense.lunch = (expense as Meal).lunch;

    await this.expenseRepository.save(newExpense);
    return this.expenseRepository.findOne({where: { id: newExpense.id },});
}

我有这个实体和他各自的 Dto。

@Entity({ name: 'expenses' })
@TableInheritance({
    column: {
        type: 'varchar',
        name: 'expense_type',
    },
})
export class Expense {
    @PrimaryGeneratedColumn()
    id: number;
    ...
    ...
}

@ChildEntity()
export class Meal extends Expense {
    @Column({ default: true })
    lunch: boolean;
}

问题是,每当我去保存时,它都会保存为费用(根据我设置的参数)而不是餐食。 通过此输入:

{
    ...
    "expenseType": "MEAL",
    "lunch": false
}

输出总是这样的。

{
    "expenseType": "DEFAULT"
}

我尝试在该方法中根据 ExpenseType 变量(用现有类型的枚举填充)检查费用类型,并从那里分配子实体的相应数据。当我保存时,它总是像父实体一样保存。

typescript postgresql nestjs typeorm nestjs-typeorm
1个回答
0
投票

我相信您面临保存问题,因为您正在使用

@ChildEntity
注释。来自文档

TypeORM 还支持单表继承。当您有多个具有自己属性的类,但在数据库中它们存储在同一个表中时,单表继承是一种模式。

© www.soinside.com 2019 - 2024. All rights reserved.