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

Удаление связи в Nest

Пусть материал больше не должен указывать на автора, но сама строка материала и строка человека остаются в базе. Нужно снять только ссылку, а не записи целиком.

Поле связи делают необязательным: в опциях ManyToOne ставят nullable со значением true, а тип поля допускает пустое значение. В сервисе объекту поста присваивают null вместо автора и снова отправляют строку в базу.

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

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, { nullable: true }) author: Author | null; }

Сервис загружает пост, обнуляет поле автора и записывает изменение:

import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Post } from '../post.entity.js'; @Injectable() export class PostService { constructor( @InjectRepository(Post) private postRepository: Repository<Post>, ) {} async detachAuthor(postId: number): Promise<Post> { const post = await this.postRepository.findOneBy({ id: postId }); if (!post) { throw new Error('Post not found'); } post.author = null; 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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить