#mysql #typescript #nestjs #one-to-many #typeorm
Вопрос:
Я пытаюсь сохранить массив объектов в своем проекте nestjs в соотношении «один ко многим».
Интерфейс дает мне что-то подобное для работы:
[ { "actor":"actorname", "role":"actorrole" }, { "actor":"actorname2", "role":"actorrole2" } ]
чтобы сохранить все это, я создал сущность фильма и сущность актера, подобную этой:
актер.сущность.ts
//imports @Entity() export class Actor { @PrimaryGeneratedColumn() id: number; @ManyToOne(() => Movie, (movie) => movie.actors) movieId: number; @Column() role: string; @Column() actor: string; }
фильм.сущность.ts
//imports @Entity() export class Movie { @PrimaryGeneratedColumn() id: number; //more stuff @OneToMany(() => Actor, (actor) => actor.movieId) actors: Actor[]; }
проблема сейчас в том, что мой интерфейс возвращает данные JSON в виде целой строки, поэтому я должен JSON.parse()
сначала их обработать и принять в своем dto, как это:
//imports export class CreateMovieDto { actorsArray: string; }
теперь моя проблема заключается в сохранении данных json
//imports @EntityRepository(Movie) export class MoviesRepository extends Repository<Movie> { async createMovie( createMovieDto: CreateMovieDto, fileName: string, filePath: string, ) { const movie = this.create(createMovieDto); let actorsArray = JSON.parse(createMovieDto.actorsArray); //how do i save it now together with the movie? try { //await this.save(movie); disabled for now return movie; } catch (error) { if ((error.code = 'ER_DUP_ENTRY')) { console.log(error); throw new ConflictException('Movie already exists'); } else { console.log(error); throw new InternalServerErrorException(); } } }