使用 typeorm 和 type-graphql 从 DB 检索数据时出错
Posted
技术标签:
【中文标题】使用 typeorm 和 type-graphql 从 DB 检索数据时出错【英文标题】:Error retrieving data from DB using typeorm and type-graphql 【发布时间】:2021-08-06 04:13:12 【问题描述】:我将 type-graphql 与 typeorm、apollo-server-express 和 postgreSQL 结合使用。我在 1:n 关系中有一个用户和一个客户实体,这意味着一个用户可以有多个客户。
我可以很好地创建用户和客户,但是当我尝试使用 Apollo Server Playground 检索与客户关联的用户时,我收到一条错误消息,指出“无法为不可为空的字段 Customer.user 返回 null。”
当我检查数据库时,客户表上的关联用户 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【问题讨论】:
【参考方案1】:您应该编写一个@FieldResolver
,它将根据根user
数据获取customers
。
https://typegraphql.com/docs/resolvers.html#field-resolvers
【讨论】:
非常感谢,我试试看。【参考方案2】:在您的解析器中更改find
操作,如下所示:
return Customer.find(
relations: ["user"]
);
【讨论】:
以上是关于使用 typeorm 和 type-graphql 从 DB 检索数据时出错的主要内容,如果未能解决你的问题,请参考以下文章
对 Type-graphql 和 Typeorm 实体中的外键字段使用 ID 标量类型在语义上是不是正确?
如何将“typeorm”模型转换为 graphql 有效负载?