Search code examples
typeormtypeorm-datamapper

typeorm select nested join relation fields


typeorm is not giving nested join relations selected data while using getOne method

this.repo.createQueryBuilder("po")
    .leftJoinAndSelect("po.purchaseOrderItems","poi")
    .leftJoinAndSelect("poi.items","item")
    .leftJoinAndSelect("po.center","center")
    .leftJoinAndSelect("po.vendor","vendor")
    .where(data)
    .select([
        "po.id",
        "item.name",
    ])
    .getOne()

this gives reasult as

{
  id:number
}

expected output is

{
  id:number,
  purchaseOrderItems:[{
    items:{
     name:string
    }
  }]
}

same as if i execute

this.repo.createQueryBuilder("po")
    .leftJoinAndSelect("po.purchaseOrderItems","poi")
    .leftJoinAndSelect("poi.items","item")
    .leftJoinAndSelect("po.center","center")
    .leftJoinAndSelect("po.vendor","vendor")
    .where(data)
    .getOne()

for which result i get

{
  id:number,
  purchaseOrderItems:[{
    items:{
       name:string
    }
  }]
}

Solution

  • When you use select you have to add associate relation column in the fields. You can try this

    this.repo.createQueryBuilder("po")
        .leftJoinAndSelect("po.purchaseOrderItems","poi")
        .leftJoinAndSelect("poi.items","item")
        .leftJoinAndSelect("po.center","center")
        .leftJoinAndSelect("po.vendor","vendor")
        .where(data)
        .select([
            "po.id",
            "poi", //added
            "item.name",
        ])
        .getOne()