我有一个这样的用户实体
@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 执行此查询?
答案 0 :(得分:0)
如果您想获取特定用户喜欢的所有帖子,您可以使用嵌套的 where,即
df.assign(tup=df['data'].str.extract('(\(.*\))')).apply(lambda x: x['data'].replace(x['tup'], str(tuple(round(i) for i in eval(x['tup'])))), axis=1)
0 A(1, 2)
1 B(1, 5)
2 A(6, 9)
3 B(9, 1)
dtype: object