typescript TypeORM从嵌套关系中选择数据

6tdlim6h  于 2022-12-30  发布在  TypeScript
关注(0)|答案(3)|浏览(314)

使用

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怎么可能做到这一点?

t30tvxxf

t30tvxxf1#

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

await this.budgetRepository.find({
  relations: ["contact", "contact.photo"]
})
wvt8vs2t

wvt8vs2t2#

您必须使用.select()函数并为每个实体传递所需的给定属性。
例如:

const user = await createQueryBuilder("budget")
    .leftJoinAndSelect("budget.contact", "contact")
    .leftJoinAndSelect("contact.photo", "contactPhoto")
    .select([/* everything from budget */, 'contact.photo.url'....]) // added selection
    .getMany();
omhiaaxx

omhiaaxx3#

这是可能的,但我们必须使用.select()手动选择所有内容

await this.budgetRepository.createQueryBuilder("budget")
  .leftJoinAndSelect("budget.contact", "contact")
  .leftJoinAndSelect("contact.photo", "contactPhoto")
  .select(['budget.id', 'contactPhoto.url']
  .getMany();

相关问题