20220204 TIL

한결·2022년 2월 7일
0

TIL(Today I Learned)

목록 보기
14/14

만들었던 디비를 typeorm으로 테이블을 생성할 것이다.

실습


erd를 만들것이다.

1:1 테이블

상품테이블과 상품거래위치 테이블을 연결해줘야 한다.
src/apis에 product와 productSalesLocation의 entities폴더를 만들어준다.
그리고 각각의 product.entity.ts, productSalesLocation.entity.ts파일을 만들어준다.

productSalesLocation.entity.ts파일에 productSaleslocation클래스를 만들어준다

@Entity
export class ProductSaleslocation {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column()
  address: string;

  @Column()
  addressDetail: string;

  @Column()
  lat: number;

  @Column()
  lng: number;

  @Column({ type: 'timestamp' })
  meetingTime: Date;
}

그리고 product.entity.ts파일에 product클래스를 만들어 연결해준다

@Entity()
export class Product {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column()
  name: string;

  @Column()
  desciption: string;

  @Column()
  price: number;

  @Column()
  isSoldout: boolean;

  @JoinColumn()
  @OneToOne(() => ProductSaleslocation)
  productSaleslocation: ProductSaleslocation;
}

@JoinColumn()
@OneToOne(() => ProductSaleslocation)
productSaleslocation: ProductSaleslocation;

@JoinColumn()은 한쪽 테이블에만 적어야 하고
@OneToOne()은 한쪽/양쪽에 적어줄 수 있음

1:N 테이블

상품카테고리 테이블과 유저테이블을 상품테이블과 연결해줘야 한다.
productCategory.entity.ts파일에 ProductCategory클래스를 ,
user.entity.ts파일에 user클래스를 작성해준다.

@Entity()
export class ProductCategory {
 @PrimaryGeneratedColumn('uuid')
 id: string;

 @Column()
 name: string;
}
@Entity()
export class User {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column()
  email: string;

  @Column()
  password: string;
}

그리고 product클래스에 연결해준다.

 @ManyToOne(() => ProductCategory)
 productCategory: ProductCategory; //카테고리 연결

 @ManyToOne(() => User)
 user: User;//user연결

N:M 테이블

상품태그 테이블을 연결해줘야 한다.
productTag.entity.ts파일에 product 클래스를 만들어준다.

@Entity()
export class ProductTag {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column()
  name: string;

  @ManyToMany(() => Product, (products) => products.productTags)
  products: ProductTag[];
}

상품과 상품태그 테이블 사이에는 중간테이블이 생성되는데 @ManyToMany 를 사용한다 서로 지정 product.entity랑 다대다관계이다.
같은 내용을 Product클래스에도 작성해준다.

@JoinTable() 
  @ManyToMany(() => ProductTag, (productTags) => productTags.products) 
  productTags: ProductTag[];

상품테이블이 메인이라 조인테이블로 작성해주고, 서로 지정 productTag.entity랑 다대다관계가 된다.


이렇게 작성된 클래스를 `app.module.ts`파일에 entities 부분에 추가해야 한다.

entities:[Board]

라고 작성하면 늘어나는대로 계속 추가해줘야하기때문에

entities: [__dirname + '/apis/*/.entity.*']

라고 작성해서 디렉토리의 이름이 apis에 모든파일(**)에 모든 entity가 붙은 모든 형식의 파일이 적용되도록 바꿔줘야 한다.

0개의 댓글