如何在typeorm的多对多关系中查询额外字段

时间:2021-06-28 02:46:18

标签: 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 执行此查询?

1 个答案:

答案 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
相关问题