说我有一个像这样的Typeorm实体定义:
@Entity()
export class MyEntity {
@PrimaryGeneratedColumn()
id: number;
@Column('varchar', { length: 500 })
name: string;
...
@OneToOne(type => DocumentEntity)
@JoinColumn()
myDoc: DocumentEntity;
@OneToMany(type => DocumentEntity, document => document.myEntity)
@JoinColumn()
otherDocs: DocumentEntity[];
...
}
所以它有几个实体关系,OneToMany / OneToOne
制作DTO时该如何处理?
这里有一个DTO示例:
export class CreateMyEntityInputDto {
@IsString()
name: string;
...
@IsOptional()
myDoc: DocumentEntity;
@IsOptional()
otherDocs: DocumentEntity[];
....
}
我不清楚通过Graphql的最佳方法
当前graphql接口:
####################
# @input
####################
input CreateDealInput {
name: String
...
myDoc: DocumentInput
otherDocs: [DocumentInput]
}
如果我正在设计“传统的” RESTful服务,我将通过单独的端点在数据库中创建文档,等待成功返回documentID(s):int
然后将这些ID指定为myEntity.myDoc / myEntity.otherDocs
中的纯整数
创建新的myEntity
时(在单独的端点处)字段。
我在这里采用相同的方法吗? ie 我是否要在graphql的单独查询中创建文档实体,从成功响应中解析出创建的ID,然后在DTO定义中指定这些int值? >
类似:
@IsOptional()
myDoc: int;
然后,当创建myEntity时,在最终通过Typeorm保存之前,通过id:int加载那些(现有的)文档实体吗?
还是我将所有文档字段作为一个嵌套实体传递给一个大的嵌套POST graphql查询,然后使用级联创建它们?
答案 0 :(得分:0)
我自己也遇到了同样的问题。我的解决方案是按ID引用嵌套实体。在您的示例中,类似于:
export class CreateMyEntityInputDto {
@IsString()
name: string;
...
@IsOptional()
myDocId: string;
@IsOptional()
otherDocIds: string[];
....
}
此解决方案需要多个,而不是在一个突变中创建嵌套实体。