如何在 nest.js 中保存一对一关系

时间:2020-12-23 09:08:23

标签: nestjs typeorm

编辑

我在我的实体中搞砸了一些更基本的东西(我添加了级联,而 Postgres 抱怨约束)。它与 QueryRunner 无关。我会在进行更多调查时更新。

原始问题

我正在尝试使用 QueryRunner 在事务中设置关系,但它不起作用(而列起作用)。

我的代码的近似值如下:

const assignReceiver = async (userId) => {
    const queryRunner = this.connection.createQueryRunner();
    await queryRunner.connect();
    await queryRunner.startTransaction();
    const receiverId = findReceiverId(members);
    try {
        const receiver = await this.userService.findById(receiverId);
        await queryRunner.manager.update(User, userId, {
          giveTo: receiver,
          username: giver.username + ' UPDATED?',
        });
      }
      await queryRunner.commitTransaction();
      const giver = await this.userService.findById(userId);
      this.logger.debug(`giver: ${JSON.stringify(giver, null, 2)}`);
      const giverGiveTo = await giver.giveTo;
      this.logger.debug(`giverGiveTo: ${giverGiveTo}`);
    }
  }
}

输出:

giver: {
  usename: 'Bob UPDATED?',
}
giverGiveTo: null

我的实体:

@Entity()
@Unique(['username'])
export class User extends BaseEntity {
  @Column()
  username: string;

  @OneToOne(type => User)
  @JoinColumn()
  giveTo: User;

  @OneToOne(type => User)
  receiveFrom: User;
]

username(普通列)已修改,但 OneToOne 关系 giveTo 未修改。

我最初试图设置 receiveFrom 井,但 TypeORM 会抱怨该列不存在。这让我觉得我错过了一些重要的东西(例如用于更新关系的专用 API)

0 个答案:

没有答案
相关问题