Соедините столбец (идентификатор) с таблицей в NestJS с помощью TypeORM

#nestjs #typeorm

Вопрос:

Я создаю серверное приложение в NodeJS и TypeORM.

У меня есть эти таблицы:

 users
--------------------------------------------
 id        |  firstName            | lastName
--------------------------------------------
1          |  Lorem                | Ipsum

companies
------------------------------------------------------------
id        |  name
------------------------------------------------------------
1         |  Lorem

transfers
------------------------------------------------------------
id        |  points            | userId       | companyId
------------------------------------------------------------
1         |  10                | 1            | 1
 

Компания

 @Entity({ name: 'companies' })
export class CompanyEntity extends BaseEntity {
  @Column()
  name: string;

  @OneToMany(() => TransferEntity, (transfer) => transfer.company)
  transfers: TransferEntity[];
}
 

ТрансферТность

 @Entity({ name: 'transfers' })
export class TransferEntity extends BaseEntity {
  @Exclude()
  @ManyToOne(() => CompanyEntity, (company) => company.transfers)
  company: CompanyEntity;

  @Column()
  points: number;

  @Column()
  userId: number;
}
 

Определить взаимосвязь между Переводами и пользователями для меня не вариант.

Я хотел бы получить все переводы компании по ее идентификатору, а также присоединиться к userID колонке с реальным пользователем с его данными в users таблице.

 async findAllTransfersByCompanyId(id: number): Promise<TransferEntity[]> {
    // 1. Find the company by its ID
    const company = await this.companyRepository.findOne(id, {
      // 2. Get all the transfers
      relations: ['transfers'],
      // 3. Join the userId of a transfer with the user data in the 'users' table
      join: {
        alias: 'users',
        innerJoin: {
          userId: 'users.id',
        },
      },
    });

    return company.transfers;
  }
 

Связь с идентификатором пути к свойству в сущности не найдена.

Я не очень хорошо понимаю логику объединения, может быть, есть самый простой способ сделать это.

Моя цель состоит в том, чтобы объединить таблицу userID переводов с таблицей пользователей, чтобы вернуть также ее данные в ответе.

Ответ №1:

Вам нужно определить отношения между transfers и users точно так же, как вы определили между transfers и company

 @Entity({ name: 'transfers' })
export class TransferEntity extends BaseEntity {
  @Exclude()
  @ManyToOne(() => CompanyEntity, (company) => company.transfers)
  company: CompanyEntity;

  @Column()
  points: number;

  @ManyToOne((type) => User)
  user: User;
}
 

Комментарии:

1. Определить, что отношения для меня не вариант, вот почему я этого не сделал. Я хотел бы сделать отношения по-другому.