typeorm - 如何在typeorm的多对多关系中查询额外字段
问题描述
我有一个像这样的用户实体
@Entity()
export class User extends BaseEntity {
@OneToMany(() => UserLikePost, (userLikePost) => userLikePost.post)
likedPosts: UserLikePost[];
}
并像这样发布实体
@Entity()
export class Post extends BaseEntity {
@ManyToMany(() => User, (user) => user.likedPosts)
likedUsers: User[];
}
像这样桥接实体
@Entity()
export class UserLikePost extends BaseEntity {
static random() {}
@Column({
type: 'boolean',
})
isLike: boolean;
@ManyToOne(() => User, (user) => user.likedPosts)
user: User;
@ManyToOne(() => Post, (post) => post.likedUsers)
post: Post;
}
所以基本上我在用户和帖子之间有一个桥梁实体,它存储了决定用户是否喜欢帖子的 isLike 列。
列表查询工作正常,例如我可以做
postRepository.find({
relation: ['likedUsers']
})
我得到了相应的 UserLikePosts 列表。
但是,我真正想做的是以任何顺序获取帖子列表,并为每个帖子添加一个布尔字段,以显示特定用户是否喜欢该帖子。
现在我可以加载所有 UserLikePost 行并过滤用户是否存在于列表中,但这似乎是对内存的巨大浪费。我希望查询在数据库中运行,并且只返回布尔结果,无论喜欢的用户是否存在于目标帖子的 UserLikePost 表中。
如何使用 typeorm 执行此查询?
解决方案
如果您想获取特定用户喜欢的所有帖子,您可以使用嵌套位置,即
userLikePostRepository.find({
where: {
isLike: true,
user: {
id: <userId>,
},
},
relation: ['post']
})
推荐阅读
- python - 需要删除while循环
- python - Pandas:如果与列表内容匹配,则返回列值的更快方法?
- scapy - scapy "Ether()" 没有 "chksum" 参数
- mysql - 如何使用 ReactJS、Node.js 和 MySQL 查询将数据从表单数据发送到数据库?
- c# - C# 8 预览中的抽象接口方法
- php - PHP:括号交互的preg_replace问题')'
- javascript - 在没有 require() 输出的情况下,无法使用 webpack 和 Babel 为 Web 创建缩小的 JavaScript 库
- jhipster - 无法将网关或微服务连接到 JHipster Registry。Jhipster v5.8.2
- javascript - 向下滚动时调整导航栏徽标的大小,Javascript 不起作用
- python - 接收 ValueError: x 和 y 的 x 和 y 值的大小必须相同。任何帮助,将不胜感激