首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeORM TypeGraphQL OneToOne关系外键不起作用

TypeORM TypeGraphQL OneToOne关系外键不起作用
EN

Stack Overflow用户
提问于 2020-09-15 06:04:06
回答 1查看 623关注 0票数 0

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

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

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

下面是我的Account.ts实体

代码语言:javascript
复制
@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实体。

代码语言:javascript
复制
@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;
}

这是我的解析器。

代码语言:javascript
复制
@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表中可用。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2020-09-16 02:50:44

问题出在我的变种()中--细节会被保存,但即使使用{ cascade: true },也不会将其保存到账号存储库。

通过在将细节也保存在detailsRepository中之后,在accountRepository中显式地将细节保存给用户。

代码语言:javascript
复制
@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;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63892359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档