我有这段代码,我也使用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)
)
为了减少数据处理,可以使用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'
})