NestJS & TypeORM: формат DTO в почтовом запросе - PullRequest
0 голосов
/ 01 июля 2019

У меня есть эти объекты в моем приложении.

Category.ts

export class Category {
    @PrimaryGeneratedColumn()
    Id: number

    @Column()
    Name: string

    @OneToMany(type => SubCategory, subcategoy => subcategoy.Category)
    SubCategories: SubCategory[];
}

SubCategory.ts

export class SubCategory {
    @PrimaryGeneratedColumn()
    Id: number

    @Column()
    Name: string

    @ManyToOne(type => Category, category => category.SubCategories)
    @JoinColumn({name: "CategoryId"})
    Category: Category;
}

Теперь, если я хочу добавить новую подкатегорию, каким должен быть мой формат DTO? Я попробовал следующее, но внешний ключ (CategoryId) был NULL.

SubCategoryDto.ts

export class SubCategoryDto {
    Id: number;
    Name: string;
    CategoryId: number;
}

Я понимаю, почему значение столбца CategoryId было нулевым в базе данных, поскольку CategoryId пытались преобразовать в Category, и не удалось, поскольку оба они имеют другой тип. Я мог бы сделать следующее, но я чувствую, что это только увеличивает размер данных запроса (даже если они немного)

export class SubCategoryDto {
    Id: number;
    Name: string;
    Category: CategoryDto; //has the properties of Id and Name
}

Так каким должен быть формат SubCategoryDto? Нужно ли преобразовывать DTO в класс Entity, сначала выбрав категорию из базы данных, а затем создав сущность SubCategory? Например:

//request data for new sub-category
{
    Name: "Subcategory 1",
    CategoryId: 1
}

А на стороне сервера

const newSubcategory    = new SubCategory(); //entity class
newSubcategory.Name     = subCategoryDto.Name;
newSubcategory.Category = await this.categoryService.findById(subCategoryDto.CategoryId)
await this.subCategoryService.create(newSubcategory);

Однако, если я сделаю это таким образом, не будет ли это дополнительным вызовом базы данных? Каков наилучший способ справиться с этой ситуацией? Я искал в интернете весь день и не мог найти что-то связанное с этим. Я думаю, что это настолько простая вещь, которую никто не должен был спрашивать, но, к сожалению, я не уверен, как это должно быть сделано Любая помощь будет оценена.

...