繁体   English   中英

如何更改 Typeorm 中列的别名?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM