Как добавить несколько отношений по одному в TypeORM - PullRequest
0 голосов
/ 15 января 2020

Так что я боролся с этим в течение некоторого времени, у меня есть много-много вариантов в моей кодовой базе. Между пользователем и шансами. Я хочу, чтобы пользователь мог добавлять коэффициенты

Элемент пользователя:

 @Entity()
    @Unique(['username'])
    export class User extends BaseEntity {
      @PrimaryGeneratedColumn()
      id: number;

      @Column()
      username: string;

      @Unique(['email'])
      @Column()
      email: string;

      @Column()
      password: string;

      @Column({ nullable: true })
      customerId: string;

      @ManyToMany(type => Odds, odds => odds.user)
      @JoinTable()
      odds: Odds[];

      @Column()
      salt: string;

      async validatePassword(password: string): Promise<boolean> {
      const hash = await bcrypt.hash(password, this.salt);
      return hash === this.password;
  }
}

Элемент коэффициентов:

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

  @Column()
  hometeam: string;

  @Column()
  awayteam: string;

  @Column()
  hometeamLogo: string;

  @Column()
  awayteamLogo: string;

  @Column()
  bet: string;

  @Column({ type: 'real' })
  value: string;

  @Column()
  stake: number;

  @Column({ type: 'real' })
  bookieOdds: string;

  @ManyToMany(type => User, user => user.odds)
  user: User[];
}

Когда я пытаюсь добавить отношение, подобное этому

async addOddsToUser(user: User, oddsId: number): Promise<void> {
    const id = user.id;
    const userDB = await this.userRepository.findOne({ id });
    const odds = await this.oddsRepository.findOne({ id: oddsId });
    userDB.odds = [odds];
    userDB.save();
  }

В ассоциативной таблице это действительно добавляет отношение в первый раз, но если я добавляю еще одно, оно переопределяет первое отношение, я также пробовал userDB.odds.pu sh (шансы); который не работает.

Буду признателен за любую помощь!

1 Ответ

1 голос
/ 15 января 2020

Проблема в том, что ваша функция addOddsToUser переопределяет массив userDB.odds новым отдельным элементом массива каждый раз. Таким образом, существующие отношения будут удалены, как упомянуто в FAQ :

. Когда вы сохраните объект, он проверит, есть ли какие-либо категории в базе данных, связанные с вопросом - и это отсоединит их всех. Почему? Поскольку отношение, равное [] или любым элементам внутри него, будет рассматриваться как что-то, что было удалено из него, нет другого способа проверить, был ли объект удален из сущности или нет.

Поэтому, сохраняя объект как это принесет вам проблемы - удалит все ранее установленные категории.

...