TypeORM 不会进一步查询嵌套对象
TypeORM does not make further query for nested object
我目前正在使用带有 typeORM 的 PostgresQL,以及 Typegraphql。使用 ManyToOne
(用户有很多 orderItems)关系,我无法以某种方式查询嵌套对象关系。我设置了 logging: true
并看到没有 SELECT
查询 User
实体。但是,我认为应该根据 TypeORM 自动生成查询,给出我在实体中定义的关系。
在CartItem.tsEntity
@ObjectType()
@Entity()
export class CartItem extends BaseEntity {
@PrimaryGeneratedColumn()
@Field()
id!: number;
@Column()
@Field()
userId: string;
@Field(() => User, { nullable: true })
@ManyToOne((type) => User, (user) => user.cartItems)
user: User;
在User.tsEntity
export class User extends BaseEntity {
@PrimaryGeneratedColumn("uuid")
@Field()
id!: string;
@OneToMany((type) => CartItem, (cartItem) => cartItem.user)
cartItems: CartItem[];
在cartItem.tsResolver
@Mutation(() => CartItem)
@UseMiddleware(isAuth)
async createCartItem(
@Arg("input") input: CartItemInput,
@Ctx() { req }: MyContext
): Promise<CartItem> {
const newCart = await CartItem.create({
quantity: input.quantity,
userId: req.session.userId,
mealkitId: input.mealkitId,
}).save();
return newCart;
使用以下 graphql Query
,用户会 return null 即使我应该得到用户的用户名
query cartItems{
cartItems {
id
quantity
userId
user{
username
}
}
}
这是我收到的回复
{
"data": {
"cartItems": [
{
"id": 2,
"quantity": 2,
"userId": "5619ffb2-6ce2-42cf-bd5c-042f2685a045",
"user": null
},
{
"id": 1,
"quantity": 10,
"userId": "5619ffb2-6ce2-42cf-bd5c-042f2685a045",
"user": null
}
]
}
}```
我自己 运行 进入这个,在我的查询解析器中我必须 leftJoinAndSelect
所有子对象才能让它工作。你没有显示你的查询解析器,而是像
async cartItems(): Promise<CartItem[]> {
return await getConnection()
.createQueryBuilder(CartItem, 'cartItem')
.leftJoinAndSelect('cartItem.user', 'user', 'cartItem.userId = user.id')
.getMany()
}
我目前正在使用带有 typeORM 的 PostgresQL,以及 Typegraphql。使用 ManyToOne
(用户有很多 orderItems)关系,我无法以某种方式查询嵌套对象关系。我设置了 logging: true
并看到没有 SELECT
查询 User
实体。但是,我认为应该根据 TypeORM 自动生成查询,给出我在实体中定义的关系。
在CartItem.tsEntity
@ObjectType()
@Entity()
export class CartItem extends BaseEntity {
@PrimaryGeneratedColumn()
@Field()
id!: number;
@Column()
@Field()
userId: string;
@Field(() => User, { nullable: true })
@ManyToOne((type) => User, (user) => user.cartItems)
user: User;
在User.tsEntity
export class User extends BaseEntity {
@PrimaryGeneratedColumn("uuid")
@Field()
id!: string;
@OneToMany((type) => CartItem, (cartItem) => cartItem.user)
cartItems: CartItem[];
在cartItem.tsResolver
@Mutation(() => CartItem)
@UseMiddleware(isAuth)
async createCartItem(
@Arg("input") input: CartItemInput,
@Ctx() { req }: MyContext
): Promise<CartItem> {
const newCart = await CartItem.create({
quantity: input.quantity,
userId: req.session.userId,
mealkitId: input.mealkitId,
}).save();
return newCart;
使用以下 graphql Query
,用户会 return null 即使我应该得到用户的用户名
query cartItems{
cartItems {
id
quantity
userId
user{
username
}
}
}
这是我收到的回复
{
"data": {
"cartItems": [
{
"id": 2,
"quantity": 2,
"userId": "5619ffb2-6ce2-42cf-bd5c-042f2685a045",
"user": null
},
{
"id": 1,
"quantity": 10,
"userId": "5619ffb2-6ce2-42cf-bd5c-042f2685a045",
"user": null
}
]
}
}```
我自己 运行 进入这个,在我的查询解析器中我必须 leftJoinAndSelect
所有子对象才能让它工作。你没有显示你的查询解析器,而是像
async cartItems(): Promise<CartItem[]> {
return await getConnection()
.createQueryBuilder(CartItem, 'cartItem')
.leftJoinAndSelect('cartItem.user', 'user', 'cartItem.userId = user.id')
.getMany()
}