如何在Typeorm中更改列的别名



我想用响应体中的QueryBuilder更改字段的名称,即一个名为id的字段,我希望它输出为staff_id,我在这方面遇到了困难。

import { getRepository, Like } from 'typeorm';
import { RoomEntity } from '@entity/room.entity';
import { HttpException } from '@exceptions/HttpException';
import { isEmpty } from '@utils/util';
import { Room } from '@/interfaces/room.interface';
class RoomService {
public room = RoomEntity;
public async findQueryRoom(): Promise<Room[]> {
const rooms = await getRepository(this.room)
.createQueryBuilder('room')
.select(['room.id as staff_id', 'room.name'])
.getMany();
return rooms;
}

}
export default RoomService;

在控制器中,我有:

import { NextFunction, Request, Response } from 'express';
import { Room } from '@interfaces/room.interface';
import RoomService from '@services/room.service';
class RoomsController {
public roomService = new RoomService();

public getRoomsByQuery = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
try {
const findAllRoomsData: Room[] = await this.roomService.findQueryRoom();
res.status(200).json({ data: findAllRoomsData, message: 'found all' });
} catch (error) {
next(error);
}
};





}
export default RoomsController;

我在我的邮递员中得到的回复不包括staff_id字段,我看到

"data": [
{
"name": "Soba"
}
]

我该如何解决这个问题?

我不知道你是否已经得到了解决方案,但对于那些使用TypeORM的select列别名面临同样问题的人来说。我不久前也遇到了同样的问题,下面是我的解决方案。我不知道这是否是一个令人信服的解决方案,但它解决了我的问题。

public async findQueryRoom(): Promise<Room[]> {
const rooms = await getRepository(this.room)
.createQueryBuilder('room')
.select(['room.id AS staff_id', 'room.name AS name'])
.groupBy("room.id")
.getRawMany();
return rooms;
}

Why.groupBy("room.id"(当.groupBy("oom.id"。对于"room.name AS name",如果您离开"room.name",它将返回room_name而不是name。

最新更新