TypeORM 从嵌套关系中选择数据

问题描述 投票:0回答:3

使用

await this.budgetRepository.createQueryBuilder("budget")
  .leftJoinAndSelect("budget.contact", "contact")
  .leftJoinAndSelect("contact.photo", "contactPhoto")
  .getMany();

我得到一个包含这样的对象的列表:

Budget {
   id: 1,
   unnecessary_property1: something,
   contact: Contact {
      unnecessary_property2: something,
      photo: Photo {
         unnecessary_property3: something,
         url: "url.com"
      },
   },
}

但我只想选择嵌套对象(关系)中必要的属性并获取如下所示的对象列表:

Budget {
   id: 1,
   contact: Contact {
      photo: Photo {
         url: "url.com"
      },
   },
}

TypeORM 怎么可能?

sql typescript orm typeorm
3个回答
2
投票

如果您使用存储库模式,您将获得类似的结果:

await this.budgetRepository.find({
  relations: ["contact", "contact.photo"]
  select: {
    contactfield1: true,
    contactfield2: true,
    photo: {
      phototfield1: true,
      phototfield2: true,
    }
  }
})

1
投票

这是可能的,但我们必须使用

.select()

手动选择所有内容
await this.budgetRepository.createQueryBuilder("budget")
  .leftJoinAndSelect("budget.contact", "contact")
  .leftJoinAndSelect("contact.photo", "contactPhoto")
  .select(['budget.id', 'contactPhoto.url']
  .getMany();

0
投票

您必须使用

.select()
函数并传递您想要为每个实体提供的给定属性。

举个例子:

const user = await createQueryBuilder("budget")
    .leftJoinAndSelect("budget.contact", "contact")
    .leftJoinAndSelect("contact.photo", "contactPhoto")
    .select([/* everything from budget */, 'contact.photo.url'....]) // added selection
    .getMany();
© www.soinside.com 2019 - 2024. All rights reserved.