首页 > 解决方案 > 在 GraphQL 中使用空数组参数初始化对象

问题描述

我有一个Icon实体,它有一个Category列表:

import { Entity, Column, ManyToMany } from "typeorm";
import { ObjectType, Field } from "type-graphql";

import { Base } from "./Base";
import { Category } from "./Category";

@ObjectType()
@Entity()
export class Icon extends Base {

    @Field()
    @Column()
    name: string;

    @Field(() => [Category])
    @ManyToMany(() => Category, category => category.icons)
    categories: Category[];
}

在我的IconResolver突变中:

@Mutation(() => Icon!)
  async createIcon(
    @Arg("input") input: CreateIconInput
  ): Promise<Icon> {
    return  Icon.create(input).save();
  }

使用输入类型:

@InputType()
class CreateIconInput implements Partial<Icon> {
  @Field() name!: string;
}

如果我在 Apollo GraphQL 客户端中运行突变

mutation
{
createIcon(input:{name: "Ice cream" code: "icecream_Cone" })
  { 
    id 
    name 
    categories
    {
      id 
      name
    } 
  }
}

我得到错误:

$"不能为不可为空的字段 Icon.categories 返回 null。"$

如何将类别数组初始化为空数组而不是 null?我试图将代码放入createIcon创建 new 的函数中Icon,将参数从 input 复制到 new Icon,将item.categories数组更改为空Category数组,然后保存该新项而不是输入。但是,这不起作用,这看起来很奇怪,因为它应该保存空数组。
实体定义有问题吗?

标签: node.jstypescriptgraphqltypeorm

解决方案


推荐阅读