#typescript #next-js

Sub Entity 생성하기(Community)

Sep 28, 2022


테이블 컬럼


엔티티 작성

import { Expose } from "class-transformer";
import { Column, Entity, Index, JoinColumn, ManyToMany, ManyToOne, OneToMany } from "typeorm";
import BaseEntity from './Entity';
import Post from "./Post";
import { User } from "./User";

@Entity("subs")
export default class Sub extends BaseEntity {
    @Index()
    @Column({ unique: true })
    name: string;

    @Column()
    title: string;

    @Column({ type: 'text', nullable: true })
    description: string;

    @Column({ nullable: true })
    imageUrn: string;

    @Column({ nullable: true })
    bannerUrn: string;

    @Column()
    username: string;

    @ManyToOne(() => User)
    @JoinColumn({ name: "username", referencedColumnName:"username" })
    user: User;

    @OneToMany(() => Post, (post) => post.sub)
    posts: Post[]

    @Expose()
    get imageUrl(): string {
        return this.imageUrn ? `${process.env.APP_URL}/images/${this.imageUrn}` : 
        "http://www.gravatar.com/avatar?d=mp&f=y"
    }
    
    @Expose()
    get bannerUrl(): string {
        return this.bannerUrn ? `${process.env.APP_URL}/images/${this.bannerUrn}` : 
        undefined;
    }
}

데코레이터

[ Sub 테이블 ] ━━━━━━━━━━━━━━━━━━━━ [ User 테이블 ]
@ManyToOne(() => User)
@JoinColumn({ name: "username", referencedColumnName:"username" })
user: User;

예시

@ManyToOne(type => Category)
@JoinColumn({ name: "cat_id" })
category: Category;

이 코드는 데이터베이스에 categoryId 열을 생성한다.
데이터베이스에서 이 이름을 변경하려면 사용자 정의 조인 열 이름을 지정할 수 있다.

@ManyToOne(type => Category)
@JoinColumn({ referencedColumnName: "name" })
category: Category;

조인 열은 항상 다른 열에 대한 참조이다(외래 키 사용).
기본적으로 관계는 항상 관련 엔터티의 기본 열을 참조한다.
관련 엔터티의 다른 열과 관계를 생성하려면 @JoinColumn에서도 지정할 수 있다.

이제 관계는 id 대신 Category 엔터티의 이름을 참조한다.
해당 관계의 열 이름은 categoryName이 된다.



*****

© 2021, Ritij Jain | Pudhina Fresh theme for Jekyll.