Search code examples
typeorm

When performing query I get object instead of field, in related table in typeorm


These are my tables:

@Entity('localidades')
export class Localidades {

    @PrimaryGeneratedColumn()
    id: number;

    @Column({type:"varchar",length:100})
    nombre: string;

    @ManyToOne(type => Provincias)
    @JoinColumn({name: "idprovincia"})
    provincia: string;
    
}

@Entity('provincias')
export class Provincias {

    @PrimaryGeneratedColumn()
    id: number;

    @Column({type:"varchar",length:100})
    nombre: string;
    
}

This is my query:

 return await this.repository.createQueryBuilder("localidades")
    .select('localidades')
    .addSelect('provincias.nombre')
    .leftJoin('localidades.provincia','provincias')
    .getMany();

Obtained result:

    {
        "id": 1,
        "nombre": "Ciudad 1",
        "provincia": {
            "nombre": "Provincia 1"
        }
    }

Expected result:

    {
        "id": 1,
        "nombre": "Ciudad 1",
        "provincia": "Provincia 1"
    }

I need province to be returned as a field and not as an object.

Your comments will be appreciated. Thank you very much.


Solution

  • Try smth like this:

    return await this.repository.createQueryBuilder("localidades")
        .select('localidades')
        .addSelect('provincias.nombre')
        .leftJoin('localidades.provincia','provincias')
        .addSelect('provincias.nombre AS localidades_provincia') // select with alias
        .getRawMany();
    

    UPD:

    return await this.repository.createQueryBuilder("localidades")
        .leftJoin('localidades.provincia','provincias')
        .select([
          'localidades.id AS localidades_id',
          'localidades.nombre AS localidades_nombre',
          'provincias.nombre AS localidades_idprovincia',
          'provincias.nombre AS localidades_provincia'
        ]).getRawMany();