使用 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;
}
}
....
设置/版本
- 节点:v14.17.0
- "apollo-server-express": "^2.24.0",
- "type-graphql": "^1.1.1",
- “typeorm”:“0.2.32”
- postgreSQL: 13.2
在您的解析器中更改 find
操作,如下所示:
return Customer.find({
relations: ["user"]
});
您应该编写一个 @FieldResolver
,它将根据根 user
数据获取 customers
。
https://typegraphql.com/docs/resolvers.html#field-resolvers
我将 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;
}
}
....
设置/版本
- 节点:v14.17.0
- "apollo-server-express": "^2.24.0",
- "type-graphql": "^1.1.1",
- “typeorm”:“0.2.32”
- postgreSQL: 13.2
在您的解析器中更改 find
操作,如下所示:
return Customer.find({
relations: ["user"]
});
您应该编写一个 @FieldResolver
,它将根据根 user
数据获取 customers
。
https://typegraphql.com/docs/resolvers.html#field-resolvers