Search code examples
javascriptnode.jstypescripttypeorm

Make CreateQueryBuilder return nested object instead of one flat object


I'm using Typescript with TypeORM. Using CreateQueryBuilder, I want to receive a nested object. Instead I'm receiving a single flat object as represented in block number two. How can I fix this?

const x = await getConnection()
  .createQueryBuilder()
  .select(['reportHead', 'order', 'workOrder'])
  .from('report_head', 'reportHead')
  .innerJoin('reportHead.workOrder', 'workOrder')
  .innerJoin('workOrder.order', 'order')
  .where(`order.customer.id = :customerId`, { customerId: req.user.customer.id })
  .execute();

How can I avoid the data looking like this:

{
  "reportHead_id": "asd",
  "reportHead_number": "123",
  "workOrder_id": "dsa",
  "workOrder_status: "OK",
  "order_id": "sda",
  "order_whatev": "ks"
}

but rather have a neste object like this:

{
  "reportHead": {
    "id": ...
  },
  "workOrder": {
    "id": ...
  },
  "order": {
    "id": ...
  }
}

Solution

  • The solution was to not use .execute(), but rather .getMany().