РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsPmRnSV 166 of 168 menu
◀ ▶

Сохранение связанной записи в Nest

Пусть новый материал уже собран в памяти, а автор ещё не лежит в своей таблице. Одной записи материала мало: сначала нужна строка человека, иначе ключ некуда поставить.

Соседа привязывают через поле author на объекте поста. Сначала отправляют автора в базу, затем материал с уже присвоенным объектом. Два отдельных шага без каскадного удаления хватает, чтобы связь сохранилась.

Покажем на примере поста и автора:

import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'; import { Author } from './author.entity.js'; @Entity() export class Post { @PrimaryGeneratedColumn() id: number; @Column() title: string; @ManyToOne(() => Author, (author) => author.posts) author: Author; }

В сервисе создадим автора, присвоим его посту и отправим оба объекта по очереди:

import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Author } from '../author.entity.js'; import { Post } from '../post.entity.js'; @Injectable() export class PostService { constructor( @InjectRepository(Post) private postRepository: Repository<Post>, @InjectRepository(Author) private authorRepository: Repository<Author>, ) {} async createPostWithAuthor( title: string, authorName: string, ): Promise<Post> { const author = this.authorRepository.create({ name: authorName }); await this.authorRepository.save(author); const post = this.postRepository.create({ title }); post.author = author; return this.postRepository.save(post); } }

Модуль темы регистрирует сущности и сервис:

import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Author } from '../author.entity.js'; import { Post } from '../post.entity.js'; import { PostService } from './post.service.js'; @Module({ imports: [TypeOrmModule.forFeature([Post, Author])], providers: [PostService], }) export class PostsModule {}

Корень подключает базу с созданием таблиц при старте:

import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { PostsModule } from './posts/posts.module.js'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, username: 'postgres', password: 'postgres', database: 'site', autoLoadEntities: true, synchronize: true, }), PostsModule, ], }) export class AppModule {}

Сохраните Worker и Department двумя шагами с присвоением отдела работнику, зарегистрируйте сущности в WorkersModule и подключите модуль к корню с созданием таблиц при старте.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить