通过两个用户的ID查找聊天记录

问题描述 投票:0回答:1

我有这段代码,我也使用typeorm和nestjs

@Entity('chats')
export class ChatEntity extends BaseEntity {
    @ManyToMany(() => UserEntity, {
        onDelete: 'CASCADE'
    })
    @JoinTable({})
    members: UserEntity[]
}

在会员中可以有两个用户,他们的顺序并不重要,我需要找到一个聊天室,以便在聊天室中有一个具有一个 id 的用户,还有另一个具有不同 id 的用户

有这样的替代方案,但是非常昂贵并且需要很多时间

const chats = await this.chatRepository.find({
            where: {
                members: {
                    id:id1
                }
            },
            relations: ['members'],
            relationLoadStrategy: 'query'
        })

        const chat = chats.find(
            (chat) =>
                chat.members.some((user) => user.id === id1) &&
                chat.members.some((user) => user.id === id2)
        )
nestjs typeorm
1个回答
0
投票

为了减少数据处理,可以使用whereIn(SQL)。 要使用 TypeORM 来完成此操作,您可以使用 typeorm 包中的 In 。 所以你必须先导入它

import { In } from 'typeorm';

随后,由于提供了两个 ID,您可以执行以下操作:

const chats = await this.chatRepository.find({
      where: {
        members: {
          id: In([id1, id2])
        }
      },
      relations: { 
        members: true,
      },
      relationLoadStrategy: 'query'
    })
© www.soinside.com 2019 - 2024. All rights reserved.