본문 바로가기

mysql

TYPEORM - nestjs - save FK관련 저장문제 해결

 save를 통해 userId와 quantity를 모두 올바르게 저장하였지만 productItems만 저장되지 않았다. product_items는 product table의 PK를 FK로 참고하고 있던 컬럼이였다.

 

 

 

 

 

 

async createCart(cart:CreateCartDto, userId: number) {
    cart.userId = userId;

    return await this.cartRepository.save(cart);
  }

 

콘솔을 찍어봤지만 다 잘들어가고 있었다. 

뭐가 문젠지 몰라서 객체로 직접 다 넣어서 save도 시켜주고 그랬지만 당연하게도 해결되지않았다. 

알고보니 product_items는 product table을 참고 하고 있었기때문에 저장할 데이터의 이름을 id로 맞춰줘야했다

생각해보니 userId도 마찬가지였기에 고쳐주었다.... 그냥 FK생각안하고 저장이 된듯싶다.

  async createCart(cart: InputCartDto, userId: number) {
    return await this.cartRepository.save({
      userId: { id: userId },
      quantity: cart.quantity,
      productItem: { id: cart.productItem },
    });

 

여튼 위의 코드로 바꿔주니 잘 저장이 되는 것을 볼수 있었습니다.

 

 

@Entity('cart')
export class Cart {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  quantity: number;

  @ManyToOne(() => Product, (product) => product.cart)
  @JoinColumn({ name: 'product_items' }) // 여기에서 이름을 변경
  productItem?: Product; // 이름을 변경한 속성

  @ManyToOne(() => Users, (user) => user.cart)
  @JoinColumn({ name: 'user_id' })
  userId: Users;
}
@Entity('product')
export class Product {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ name: 'names' })
  name: string;

  @Column()
  descriptrions: string;

  @Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
  created_at: Date;

  @OneToMany(() => Cart, (cart) => cart.productItem)
  cart?: Cart[];
}

'mysql' 카테고리의 다른 글

TYPESCRIPT - typeorm - snakeCase  (0) 2023.07.31
TYPEORM - Nestjs - Entity(ONETOMANY, MANYTOONE)  (0) 2023.05.23
unic5n - showRoom 쿼리문  (0) 2023.04.15
LIMIT  (0) 2023.04.06
Sub-query  (0) 2023.04.06