@yaroslav1996

Как корректно обновить Entity с relation oneToMany @nestjs/typeorm драйвер pg?

Всем привет, дорогие друзья! Подскажите пожалуйста, есть проблема с обновлением relations в entity.

Пример сущности тренера:

@Entity()
export class Trainer {
  @OneToMany(() => Social, (social: Social) => social.trainer, {
    cascade: true,
  })
  socials: Social[];
}


Пример сущности соц сети:

@Entity()
export class Social {
  @ManyToOne(() => Trainer, (trainer) => trainer.socials)
  trainer: Trainer;
}


При создании всё отрабатывает корректно, используя следующий код:

const trainer = this.trainerRepository.create(createTrainerInput);
      await this.trainerRepository.save(trainer);


При использовании метода update, получаю слкющую ошибку:

Error: Cannot query across one-to-many for property socials
    at _loop_4 (D:\starsup\src\query-builder\QueryBuilder.ts:1030:27)
    at UpdateQueryBuilder.QueryBuilder.createPropertyPath (D:\starsup\node_modules\typeorm\query-builder\QueryBuilder.js:907:17)
    at UpdateQueryBuilder.createUpdateExpression (D:\starsup\src\query-builder\UpdateQueryBuilder.ts:387:18)
    at UpdateQueryBuilder.getQuery (D:\starsup\src\query-builder\UpdateQueryBuilder.ts:48:21)
    at UpdateQueryBuilder.QueryBuilder.getQueryAndParameters (D:\starsup\src\query-builder\QueryBuilder.ts:446:28)
    at UpdateQueryBuilder.<anonymous> (D:\starsup\src\query-builder\UpdateQueryBuilder.ts:106:50)
    at step (D:\starsup\node_modules\tslib\tslib.js:143:27)
    at Object.next (D:\starsup\node_modules\tslib\tslib.js:124:57)
    at fulfilled (D:\starsup\node_modules\tslib\tslib.js:114:62)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)


Такое решение создает новый элемент вместо обновления:

const trainer = await this.trainerRepository.findOne({ id });

    for (const [key, value] of Object.entries(updateTrainerInput)) {
      trainer[key] = value;
    }

    await this.trainerRepository.save(trainer);


Как решить проблему правильно ?
  • Вопрос задан
  • 972 просмотра
Пригласить эксперта
Ответы на вопрос 1
yarkov
@yarkov
Помог ответ? Отметь решением.
Мне такой способ помог:
const trainer = await this.trainerRepository.findOne({ id });

for (const [key, value] of Object.entries(updateTrainerInput)) {
  trainer[key] = value;
}

trainer.id = id;

await this.trainerRepository.save(trainer);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы