typeorm select nested join relation fields

2.2k Views Asked by At

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
    }
  }]
}
1

There are 1 best solutions below

1
Mohammad Abu Musâ Robı On BEST ANSWER

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()