Skip to content
Advertisement

GraphQL – “Field “updateOwner” of type “Owner!” must have a selection of subfields. Did you mean “updateOwner { … }”?”

I’m trying to get Mutation Update query in GraphQL Playground. I’m basic level in GraphQL and in learning phase. I don’t know how to create udpate Mutation for the below Owner code. Any idea what I’m missing in my code / query?

—Resolver—

>   @Mutation(() => Owner)   updateOwner(
>     @Args('id', { type: () => Int }) id: number,
>     @Args('updateOwnerInput') updateOwnerInput: UpdateOwnerInput) {
>     return this.ownersService.update(id, updateOwnerInput);   }

—Service—

  update(id: number, updateOwnerInput: UpdateOwnerInput) {
    return this.ownersRepository.update(id, updateOwnerInput);
  }

—dto—

@InputType()
export class UpdateOwnerInput extends PartialType(CreateOwnerInput) {
  @Column()
  @Field(() => Int)
  id: number;
}

—entity—

@Entity()
@ObjectType()
export class Owner {
  @PrimaryGeneratedColumn()
  @Field(type => Int)
  id: number;

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

  @OneToMany(() => Pet, pet => pet.owner)
  @Field(type => [Pet], { nullable: true })
  pets?: Pet[];

}

—schema—

type Pet {
  id: Int!
  name: String!
  type: String
  ownerId: Int!
  owner: Owner!
}

type Owner {
  id: Int!
  name: String!
  pets: [Pet!]
}

type Query {
  getPet(id: Int!): Pet!
  pets: [Pet!]!
  owners: [Owner!]!
  owner(id: Int!): Owner!
}

type Mutation {
  createPet(createPetInput: CreatePetInput!): Pet!
  createOwner(createOwnerInput: CreateOwnerInput!): Owner!
  updateOwner(id: Int!, updateOwnerInput: UpdateOwnerInput!): Owner!
}

input CreatePetInput {
  name: String!
  type: String
  ownerId: Int!
}

input CreateOwnerInput {
  name: String!
}

input UpdateOwnerInput {
  name: String
  id: Int!
}

—GraphQL Query (I don’t know whether it is correct or wrong)

mutation {
  updateOwner (updateOwnerInput:{
    id:6,
    name: "josh",    
  })
}

—error—

"message": "Field "updateOwner" of type "Owner!" must have a selection of subfields. Did you mean "updateOwner { ... }"?",

Advertisement

Answer

You need to make a selection of subfields to return (even if you’re not interested in any):

mutation {
  updateOwner (updateOwnerInput:{
    id:6,
    name: "josh",    
  })
  {
    id
    name
  }
}
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement