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

Связь один к одному в Nest

Пусть у материала не больше одной обложки, и обложка не делится между строками. Это другой масштаб, чем «много статей у одного автора»: с обеих сторон по одной записи.

Связь «один к одному» задают пометкой OneToOne. Колонку с ключом обычно держат на стороне, где связь обязательна. Пометка JoinColumn говорит, что внешний ключ лежит в таблице поста.

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

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Cover { @PrimaryGeneratedColumn() id: number; @Column() url: string; }

У материала добавим поле обложки и колонку связи:

import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn, } from 'typeorm'; import { Cover } from './cover.entity.js'; @Entity() export class Post { @PrimaryGeneratedColumn() id: number; @Column() title: string; @OneToOne(() => Cover) @JoinColumn() cover: Cover; }

Обе сущности передаём в forFeature модуля темы:

import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Cover } from '../cover.entity.js'; import { Post } from '../post.entity.js'; @Module({ imports: [TypeOrmModule.forFeature([Post, Cover])], }) 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 и одну запись профиля один к одному с колонкой на стороне работника, зарегистрируйте сущности в WorkersModule и подключите модуль к корню с созданием таблиц при старте.

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