0

我正在尝试使用 TypeORM 和 TypeGraphQL 创建双向 OneToOne 关系。我有两个实体一个Account.tsDetails.ts

现在,我可以在帐户的上下文中创建详细信息,并成功地从上下文中填充帐户 ID。

但是,在我的 Account 表中, detailsId 字段(外键)保持为空并且不会更新。因此,我无法在上下文中查询详细信息。

这是我的Account.ts实体

@ObjectType()
@Entity()
export class Account extends BaseEntity {
  @Field()
  @PrimaryGeneratedColumn()
  id: number;

  @OneToOne(() => Details, (detail) => detail.user, {cascade: true, eager: true})
  @Field(() => Details)
  @JoinColumn()
  detail: Details;
}

这是我的Details.ts实体。

@ObjectType()
@Entity()
export class Details extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

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

  @Field()
  @Column()
  userId: number;

  @OneToOne(() => Account, (user: Account) => user.detail)
  user: Account;
}

这是我的解析器。

@Mutation((_returns) => Details)
  @UseMiddleware(isAuth)
  async addDetails(
    @Arg("title") title: string,
    @Ctx() { req }: MyContext
  ): Promise<Details> {
    const details = this.detailsRepository.create({
      title,
      userId: req.session.userId,
    });
    return await this.detailsRepository.save(details);
  }

我相信我定义我的实体错误,否则Account.ts表中将提供外键。

任何帮助是极大的赞赏。

4

1 回答 1

0

问题出在我的 Mutation() 中 - 详细信息正在保存,但即使{ cascade: true }保存也没有保存到帐户存储库。

在将详细信息保存在 detailsRepository 中之后,通过在 accountRepository 中将详细信息显式保存给用户。

@Mutation((_returns) => Boolean)
  @UseMiddleware(isAuth)
  async addDetails(
    @Arg("title") title: string,
    @Ctx() { req }: MyContext
  ) {
    const details = this.detailsRepository.create({
      title,
      userId: req.session.userId,
    });
    await this.detailsRepository.save(details);

    const user = await this.accountRepository.findOne(req.session.userId);

    if (!user) {
      return false;
    }

    if (user) {
      user.details = details;
      await this.accountRepository.save(user);
    }

    return true;
  }
于 2020-09-15T18:50:44.430 回答