Typeorm 多对多关系

Typeorm Many to Many relation

提问人:Matin 提问时间:11/16/2023 最后编辑:Matin 更新时间:11/17/2023 访问量:36

问:

我有两个实体(群组和用户)

export class Cohort {
  @PrimaryGeneratedColumn()
  id: number;
  
  @Column()
  name: string;

  @ManyToMany(() => User, (user) => user.cohortsPupil)
  @JoinTable()
  pupils: User[]
}
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ unique: true })
  email: string;

  @ManyToMany(() => Cohort, (cohort) => cohort.pupils)
  cohortsPupil: Cohort[]
}

如何更新 Cohort.Pupils ?

const cohort = await this.queryOneByOption({
  relations: ['pupils'],
  where: { id },
});

cohort.pupils = pupilUpdate.pupils;

await this.save(cohort);

我使用这段代码,一周前它起作用了,但现在当学生以前有过一段关系时,它会给出这个错误 错误:违反主键约束“PK_*******”。无法在对象“dbo.cohort_pupils_user”中插入重复的键。重复的键值为 (A, B)

所以现在我这样做:

    await this.dataSource.transaction(async (entityManager: EntityManager) => {
      await entityManager.save(Cohort, {
        id,
        pupils: [],
      });

      await entityManager.save(Cohort, {
        id,
        pupils: pupilUpdate.pupils,
      });
    });

你能告诉我你是如何做到这一点的,这个错误是否正常吗?

打字稿 nestjs nest nestjs-typeorm

评论


答: 暂无答案