[英]How do I change the alias of a column in 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 的选择列别名遇到相同问题的人。 前段时间我遇到了同样的问题,下面是我的解决方案,我不知道这是否是一个令人信服的解决方案,但它解决了我的问题。
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;
}
为什么 .groupBy("room.id") 当 .groupBy("room.id") 不存在时,它会继续选择与总行一样多的每一行,例如,如果总共有 5 行,它将每行返回 5 次这就是为什么我引入 .groupBy("room.id") 来摆脱它。 对于“room.name AS name”,如果您离开“room.name”,它将返回 room_name 而不是 name。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.