【问题标题】:TypeORM TypeGraphQL OneToOne relation foreign key not workingTypeORM TypeGraphQL OneToOne 关系外键不起作用
【发布时间】:2021-01-01 15:37:19
【问题描述】:

我正在尝试使用 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 表中可用。

非常感谢任何帮助。

【问题讨论】:

    标签: postgresql typeorm entities typegraphql graphql-mutation


    【解决方案1】:

    问题出在我的 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;
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2019-04-18
      • 2015-01-19
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      相关资源
      最近更新 更多