Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
雀巢公司+;打字形式+;Graphql:嵌套关系中DTO的正确设计模式_Graphql_Nestjs_Typeorm - Fatal编程技术网

雀巢公司+;打字形式+;Graphql:嵌套关系中DTO的正确设计模式

雀巢公司+;打字形式+;Graphql:嵌套关系中DTO的正确设计模式,graphql,nestjs,typeorm,Graphql,Nestjs,Typeorm,假设我有一个类型化实体定义,如下所示: @Entity() 导出类MyEntity{ @PrimaryGeneratedColumn() id:编号; @列('varchar',{length:500}) 名称:字符串; ... @OneToOne(类型=>DocumentEntity) @JoinColumn() myDoc:DocumentEntity; @OneToMany(类型=>DocumentEntity,文档=>document.myEntity) @JoinColumn() 其他

假设我有一个类型化实体定义,如下所示:

@Entity()
导出类MyEntity{
@PrimaryGeneratedColumn()
id:编号;
@列('varchar',{length:500})
名称:字符串;
...
@OneToOne(类型=>DocumentEntity)
@JoinColumn()
myDoc:DocumentEntity;
@OneToMany(类型=>DocumentEntity,文档=>document.myEntity)
@JoinColumn()
其他单据:DocumentEntity[];
...
}
所以它有几个实体关系,OneToMany/onetomone

在制作DTO时,我该如何实现这一点

这里我有一个DTO示例:

导出类CreateMyEntityInputDto{
@IsString()
名称:字符串;
...
@等民族()
myDoc:DocumentEntity;
@等民族()
其他单据:DocumentEntity[];
....
}
我不清楚通过Graphql的最佳方法

当前graphql接口:

####################
#@输入
####################
输入CreateDealInput{
名称:String
...
myDoc:DocumentInput
其他文档:[文档输入]
} 
如果我正在设计一个“传统的”RESTful服务,我会通过一个单独的端点在DB中创建文档,等待返回
documentID:int

然后在
myEntity.myDoc/myEntity.otherDocs
创建新的
myEntity
时的字段(位于单独的端点)

我在这里采取同样的方法吗? 我是否在graphql中的单独查询中创建文档实体,从成功响应中解析出创建的ID,然后在DTO定义中指定这些int值

比如:

@IsOptional()
myDoc:int;
然后,在创建myEntity时,在最终通过TypeForm保存之前,按id:int加载那些(现有)文档实体


还是在一个大型嵌套POST graphql查询中将所有文档字段作为嵌套实体传递,并使用cascade创建它们?

我自己也遇到了同样的问题。我的解决方案是通过id引用嵌套实体。在您的示例中,这类似于:

export class CreateMyEntityInputDto {

  @IsString()
  name: string;

  ...

  @IsOptional()
  myDocId: string;

  @IsOptional()
  otherDocIds: string[];

  ....
}
该解决方案不需要在一个变种中创建嵌套实体,而是需要多个实体