如何在typeform中保存多对多关系?



我试图在PostsHashtags之间建立关系,这里是我的两个实体,

@Entity('posts')
export class Posts {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ length: 200, nullable: true })
caption: string;
@ManyToMany(() => Hashtags, (hashtags) => hashtags.posts, { eager: true })
@JoinTable({ name: 'posts_hashtags_relation' })
hashtags: Hashtags[];
@ManyToOne(() => User)
@JoinColumn({ name: 'author_id' })
author: User;
}

@Entity('hashtags')
export class Hashtags {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
hashtag: string;
@ManyToMany(() => Posts, (post) => post.hashtags, {
eager: false,
cascade: true,
})
posts: Posts[];
@CreateDateColumn({ name: 'created_at' })
createdAt: Date;
}

通过这些,typeform创建了一个数据库posts_hashtags_relation,其中包含列postsIdhashtagsId我在标签表中保存标签的服务是这样的

async createPost(creator : User, body: CreatePostDto) {
if (!body.caption) {
throw new BadRequestException('Post must contain some text');
}
// Extract hashtags from the post caption body
const hashtags = body.caption.match(/#w+/g); // hashtags are the array of all hashtags in the post caption
if(hashtags){
for (const hashtag of hashtags) {
const hashtagEntity = await this.hashtagRepo.findOne({ hashtag });
if (!hashtagEntity) {
await this.hashtagRepo.save({ hashtag });
}
}
}

const post = new Posts();
post.author = creator;
post.caption = body.caption;
post.images = body.images;
const resPost = await this.postsRepo.save(post);
return resPost;
}

但是如何在posts_hashtags_relation表中保存关系?

post实体中有一列hashtags: Hashtags[];Hashtags中也是一样。

所以你可以在两个实体中保存关系的数据:
我们可以用你的代码:

...
let hashtagsEntites:Array<Hashtags> = [];
if(hashtags){
for (const hashtag of hashtags) {
var hashtagEntity = await this.hashtagRepo.findOne({ hashtag });
if (!hashtagEntity) {
hashtagEntity =  await this.hashtagRepo.save({ hashtag });
}
hashtagsEntites.push(hashtagEntity);
}
}
const post = new Posts();
post.author = creator;
post.caption = body.caption;
post.images = body.images;
post.hashtags= hashtagsEntites  ; // here's how we save hashtags's post in the table 'posts_hashtags_relation'  
const resPost = await this.postsRepo.save(post);

最新更新