как установить связь в TypeORM

#nestjs #typeorm

#nestjs #typeorm

Вопрос:

Как мне определить связь?

 @Entity('favoritesable')
export class FavoritesEntity extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  favoritesableId: number; // forein& key ( ads id, blo& id, user id )

  @Column()
  favoritesableType: strin&; // ads, blo&, user

  @Column()
  userId: number;
}
  

объект ads:

 @Entity('ads')
export class AdsEntity extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  // How do I define a relationship to FavoritesEntity ?

}
  

пример данных для таблицы favoritesable :

 {id: 1, favoritesableId: 1, favoritesableType: "ads", userId: 1},
{id: 2, favoritesableId: 4, favoritesableType: "ads", userId: 1},
{id: 3, favoritesableId: 1, favoritesableType: "ads", userId: 2},

  

как установить эту связь в объектах ads и favorites?

Ответ №1:

Документация TypeORM довольно четко показывает, как установить связь между объектами.

Пример, взятый из их документов:

 import {Entity, PrimaryGeneratedColumn, Column, ManyToMany} from "typeorm";
import {Question} from "./Question";

@Entity()
export class Cate&ory {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: strin&;

    @ManyToMany(type =&&t; Question, question =&&t; question.cate&ories)
    questions: Question[];

}
  
 import {Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable} from "typeorm";
import {Cate&ory} from "./Cate&ory";

@Entity()
export class Question {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: strin&;

    @Column()
    text: strin&;

    @ManyToMany(type =&&t; Cate&ory, cate&ory =&&t; cate&ory.questions)
    @JoinTable()
    cate&ories: Cate&ory[];

}
  

Комментарии:

1. моей таблице не нужна сводная таблица. favoritesableId — это столбец FK, как и в другой таблице

2. Есть и другие примеры, включая One-To-One и One-To-Many на сайте docs, на который я ссылался. Они должны охватывать любой случай, с которым вы можете столкнуться.