返回类型ORM删除突变

时间:2019-08-21 16:12:46

标签: typescript graphql typeorm type-graphql

我无法进行delete突变,导致函数返回错误。

如果我在GraphQL中运行BairroDelete,则由于graphql中的突变会发生错误。

消息:

  

字段\ BairroDelete \不能有选择,因为类型\“布尔!\没有子字段。,

代码:

import { Resolver, Query, Mutation, Arg } from "type-graphql";
import { Bairro } from "../entities/Bairro";
import { status } from "../enumerador";

@Resolver(of => Bairro)
export class BairroResolver {
  @Query(returns => [Bairro])
  async Bairros() {
    return await Bairro.find();
  }

  @Mutation(() => Bairro)
  async BairroSave(
    @Arg("nome") nome : string
  ) 
  {
    const ativo = await status.Ativo;

    const bairro = await Bairro.create({
      nome,
      status: ativo
    }).save()

    return bairro;
  }

  @Mutation(() => Boolean)
  async BairroDelete(
    @Arg("id") id : string
  ) 
  {
    const sucesso = await Bairro.delete({ id });
    return sucesso;  // <<<<<< ERROR HERE
  }
}

2 个答案:

答案 0 :(得分:0)

  

字段\ BairroDelete \不能有选择,因为类型\“布尔!\没有子字段。

您需要向我们展示您的graphql突变文档。

您似乎正在执行以下操作:

mutation {
  BairroDelete(id: 123) {
    status
  }
}

这是非法的,因为BairroDelete返回的是布尔标量,而不是可以从中选择字段的对象类型。

答案 1 :(得分:0)

您从sucesso返回的

Bairro.delete不是布尔类型,它是来自TypeOrm的对象DeleteResult,看起来像这样:

DeleteResult {
  raw: OkPacket {
    fieldCount: 0,
    affectedRows: 0,
    insertId: 0,
    serverStatus: 2,
    warningCount: 0,
    message: '',
    protocol41: true,
    changedRows: 0
  },
  affected: 0
}

首先,您必须定义删除操作的“成功”,因为它根本不会影响任何行。缺少的是从TypeOrm返回的对象到您希望在Graphql突变中响应的转换。删除与其他操作不同,但是大多数情况下,您会获得实体实例并返回它。