typescript - NestJS & TypeORM:发布请求中的 DTO 格式
问题描述
我的应用程序中有这些实体。
类别.ts
export class Category {
@PrimaryGeneratedColumn()
Id: number
@Column()
Name: string
@OneToMany(type => SubCategory, subcategoy => subcategoy.Category)
SubCategories: 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 的格式应该是什么?我是否需要通过首先从数据库中获取类别然后创建 SubCategory 实体来将 DTO 转换为实体类?例如:
//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);
但是,如果我这样做,那不是需要额外的数据库调用吗?处理这种情况的最佳方法是什么?我整天在互联网上搜索,找不到与此相关的东西。我想这是一件简单的事情,没有人需要问,但不幸的是我不确定应该如何处理。任何帮助,将不胜感激。
解决方案
您需要在 SubCategory 实体中添加 CategoryId 属性以允许映射 DTO 和实体:
export class SubCategory {
@PrimaryGeneratedColumn()
Id: number
@Column()
Name: string
@Column()
CategoryId: number
@ManyToOne(type => Category, category => category.SubCategories)
@JoinColumn({name: "CategoryId"})
Category: Category;
}
TypeORM 自动生成该列,但没有“手动”声明,DTO 的字段 CategoryId 尝试在 Category 实体中转换并失败。
推荐阅读
- android - 如何在 android 中使用 geotools(如何将 geotools lib 添加到 android)?
- javascript - Phantom 不从站点获取 HTML,只获取源代码
- function - 为什么我的参数没有传递给函数?
- node.js - 弹性JS节点JS无法更新索引
- python - 如何根据以下规则转换矩阵中的向量
- c# - 如何捕获用户输入C#
- c++ - 如何区分“move”和“const ref&”的重载函数?
- c - 为什么我的泰勒级数对于某些输入计算余弦不准确?
- java - 如何跟踪 FileOutputStream 下载了多少?
- javascript - 如何将十六进制字符串转换回编码的十六进制文件?