首页 > 解决方案 > OneToOne 加入 Foalts 和 Typeorm

问题描述

我有两个用 Foalts 框架编写的实体,它们正在使用 Typeorm。

这是user.entity.ts

@Entity()
export class User extends BaseEntity {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  password: string;

  @Column({ unique: true })
  phone: string

  @OneToOne(() => UserProfile)
  @JoinColumn()
  userProfile: UserProfile

}

第二个是用户资料:

@Entity()
export class UserProfile extends BaseEntity {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstname: string;

  @Column()
  surname: string

  @Column()
  email: string

  @Column()
  birthDate: number
}

export { DatabaseSession } from '@foal/typeorm';

我的问题是:如何在我的控制器中编写查询以在输出中有这样的对象:

{
    "id":41,
    "phone":"+18885555555",
    "userProfile" : {
      "id": 12,
      "firstname": "Pourya",
      "surname": "Daneshvar",
      "email": "example@example.me",
      "birthDate": 1613503707
    }
}

这是我的控制器:

@Get('/user/profile')
  async getUserProfile(ctx: Context) {
    const user = await ...
    ...
    return new HttpResponseOK(user)
  }

标签: typescripttypeorm

解决方案


最简单的方法是向关系添加Eager: true选项,如下所述

@Entity()
export class User extends BaseEntity {
    // ...
    @OneToOne(() => UserProfile, { eager: true } )
    @JoinColumn()
    userProfile: UserProfile;
}

或者,如果您不希望每次加载用户时都检索 UserProfile 数据,您可以将关系选项添加到findor findOne,例如

 const user = await User.findOne({ where: { id: userId } , relations: ["userProfile"] });

推荐阅读