TypeORM:getRawMany() 和 getMany() 有什么区别?

Alv*_*nus 5 typeorm node.js-typeorm

我有这个代码:

  let otherParticipants = await chatRoomParticipantRepo
    .createQueryBuilder("chatRoomParticipant")
    .leftJoinAndSelect("chatRoomParticipant.user", "user")
    .select("user.connectionId")
    .where("chatRoomParticipant.chatRoomId = :chatRoomId AND chatRoomParticipant.userId != :userId")
    .setParameters({ chatRoomId: chatRoomId, userId: userId })
    .getRawMany();
Run Code Online (Sandbox Code Playgroud)

这给了我这个结果:

[{user_connectionId: 's7p7bUbzt0wudKcxAAAD'}]
Run Code Online (Sandbox Code Playgroud)

如果我这样做,getMany()它会给我空数组:

[]
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取ID连接user到 的chatRoomParticipant,但我无法使用以下代码来做到这一点:

  let otherParticipants = await chatRoomParticipantRepo
    .createQueryBuilder("chatRoomParticipant")
    .leftJoinAndSelect("chatRoomParticipant.user", "user")
    .select("user.connectionId")
    .where("chatRoomParticipant.chatRoomId = :chatRoomId AND chatRoomParticipant.userId != :userId")
    .setParameters({ chatRoomId: chatRoomId, userId: userId })
    .getMany(); <-- This gives nothing
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?我以为getRawMany()只是为了SUM, COUNT, etc。在这种情况下,我试图获取getMany()也应该使用的 ID?

小智 5

使用选择查询生成器可以获得两种类型的结果:实体和原始结果。大多数时候,您需要从数据库中选择真实的实体,例如用户。为此,您可以使用 getOne 和 getMany。但是,有时您需要选择特定数据,例如所有用户照片的总和。这样的数据不是实体,它被称为原始数据。要获取原始数据,请使用 getRawOne 和 getRawMany。

  • 请参阅 Typeorm 文档。

希望对您有帮助


You*_*uba 0

在您的情况下,您应该使用,getRawMany()因为您想选择实体的某些指定字段,getMany()它返回实体关注的数组