使用 typeorm 和 type-graphql 从数据库中检索数据时出错

Error retrieving data from DB using typeorm and type-graphql

我将 type-graphql 与 typeorm、apollo-server-express 和 postgreSQL 结合使用。我在 1:n 关系中有一个用户和一个客户实体,这意味着一个用户可以有多个客户。

我可以很好地创建用户和客户,但是当尝试使用 Apollo Server playground 检索与客户关联的用户时,我收到一条错误消息,指出“不能 return null for non-nullable field Customer.user."

我查了数据库,客户table上的关联用户id肯定不为空(见附图)。

query {
  customers {
    customerId
    customerName
    user {      
      userId    
    }         
  }
}

有谁知道我做错了什么吗?

User.ts

import { Field, ID, ObjectType } from "type-graphql";
import { BaseEntity, Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import { Customer } from "./Customer";

@ObjectType()
@Entity("users")
export class User extends BaseEntity {
    @Field(() => ID)
    @PrimaryGeneratedColumn("uuid")
    userId: string;

    @Field()
    @Column({ unique: true })
    email: string;

    @Column({ nullable: false })
    password: string;

    @Field(() => Customer)
    @OneToMany(() => Customer, customer => customer.user)
    customers: Customer[]
}

Customer.ts

import { Field, ID, ObjectType } from "type-graphql";
import { BaseEntity, Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import { User } from "./User";


@ObjectType()
@Entity("customers")
export class Customer extends BaseEntity {
    @Field(() => ID)
    @PrimaryGeneratedColumn("uuid")
    customerId: string;

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

    @Field(() => User)
    @ManyToOne(() => User, user => user.customers)
    user: User;
}

CustomerResolver.ts

export class CustomerResolver {
    @Query(() => [Customer])
    async customers():Promise<Customer[]> {

        try {
            return await Customer.find();
        } catch (error) {
            console.log(error);
            return error;
        }
    }
....

设置/版本

在您的解析器中更改 find 操作,如下所示:

return Customer.find({
  relations: ["user"]
});

您应该编写一个 @FieldResolver,它将根据根 user 数据获取 customershttps://typegraphql.com/docs/resolvers.html#field-resolvers