Как получить данные в множественном @ManyToMany в Nest. js - PullRequest
0 голосов
/ 18 марта 2020

У меня есть ManyToMany отношение между двумя объектами, и я не знаю, как я могу получить данные из объединенной таблицы "device_users_user"

@Entity()
export class Device{

  @PrimaryColumn()
  Name:string;


  @Column({ nullable: true})
  Port:number;

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

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

  @ManyToMany(type => User)
    @JoinTable()
    users: User[];

  }
@Entity()
export class User{

  @PrimaryColumn()
  Id:number;
  @Column({ nullable: true})
  Departement:string;
  @Column({ nullable: true})
  FirstName:string;
  @Column({ nullable: true})
  LastName:string;
  @Column({ nullable: true})
  CardNumber:string;
  @Column({ nullable: true})
  MobilePhone:string;

}

1 Ответ

0 голосов
/ 18 марта 2020

Вы не можете запросить таблицу соединения напрямую, используя API-интерфейс TypeORM (если только вы не попытаетесь выполнить необработанный запрос, но я предполагаю, что это не то, чего вы хотите достичь ... И я не рекомендую это, так как имена таблиц может быть изменено ...).

Однако, поскольку вы объявили отношение с помощью @ManyToMany, вы можете загрузить users вашего devices с помощью построителя запросов, например:

  const devicesWithUsers = await deviceRepository.createQueryBuilder('device')
    .leftJoin('device.users', 'user')
    .where(/* whatever you need */)
    .getMany();

Документация TypeORM дает больше примеров, например:

  const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .where("user.name = :name", { name: "Timber" })
    .getOne();

, которые могут дать, в результате:

{
    id: 1,
    name: "Timber",
    photos: [{
        id: 1,
        url: "me-with-chakram.jpg"
    }, {
        id: 2,
        url: "me-with-trees.jpg"
    }]
}
...