postgresql Typeorm/Postgres blog like约束

bgibtngc  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(118)

我正在创建一个博客,在那里你可以喜欢一个评论或与typeorm和postgres的帖子,这里是喜欢的实体:

@Entity()
@Unique(["user", "post", "comment"])
export default class Like {
  @PrimaryGeneratedColumn()
  id: number;

  // @Column()
  // likeCount: number;

  @ManyToOne(() => User, (user) => user.likes, { nullable: false })
  user: User;

  @ManyToOne(() => Post, (post) => post.likes)
  post: Post;

  @ManyToOne(() => Comment, (comment) => comment.likes)
  comment: Comment;

字符串
我想创建一个约束,用户只能喜欢一个评论/帖子一次,在上面的代码中,我尝试了独特的约束,但它不工作,我应该怎么做?我应该创建两个不同的表,一个是喜欢的帖子,一个是喜欢的评论?我如何记录每个评论/帖子有多少喜欢?
我尝试了唯一约束但不起作用

xxhby3vn

xxhby3vn1#

可以对user_id和comment_id列的组合或者user_id和post_id列的组合使用唯一约束。此将允许用户喜欢多个帖子/评论。并使用外键将喜欢与帖子/评论链接起来,以确保它们存在于数据库中

tpgth1q7

tpgth1q72#

添加列userIdpostIdcommentId并在它们上创建唯一索引。
像这样^

@Entity()
@Unique(["userId", "postId", "commentId"])
export default class Like {
  @PrimaryGeneratedColumn()
  id: number;

  // @Column()
  // likeCount: number;

  @Column()
  userId: number;

  @Column()
  postId: number;

  @Column()
  commentId: number;

  @ManyToOne(() => User, (user) => user.likes, { nullable: false })
  user: User;

  @ManyToOne(() => Post, (post) => post.likes)
  post: Post;

  @ManyToOne(() => Comment, (comment) => comment.likes)
  comment: Comment;

字符串
因此,一个用户对每个帖子只喜欢一条评论

相关问题