Как смоделировать систему последователей с использованием сущностей TypeORM - PullRequest
0 голосов
/ 03 мая 2019

Я создаю экспресс-приложение с использованием typeORM, чтобы помочь сопоставить мои объекты с моей базой данных.Я хочу создать систему последователей.У меня есть базовый макет моего объекта User, как показано ниже.Тем не менее, это создает две таблицы соединения.Я хотел бы иметь только одну таблицу, которая идет по линии 'user_follows_user', где userId_1 следует userId_2.Я хотел бы иметь возможность вести учет количества подписчиков и количества подписчиков для каждого пользователя.Это возможно?Я все еще не до конца понимаю, что даже происходит в моем коде.

import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable, RelationCount } from 'typeorm';

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    firstName: string;

    @Column()
    lastName: string;

    @Column()
    email: string;

    @Column()
    password: string;

    @Column()
    bio: string;

    @ManyToMany( type => User, user => user.followers )
    @JoinTable()
    following: User[]

    @ManyToMany( type => User, user => user.following )
    @JoinTable()
    followers: User[]

    @RelationCount((user: User) => user.followers)
    followersCount: number;

    @RelationCount((user: User) => user.following)
    followingCount: number;
}

После запуска моего кода моя схема базы данных выглядела так: https://imgur.com/XfXjfGq

Как указано выше, я чувствуюнужно только для одного стола.Хотя я открыт для других разумных схем для системы подписчиков, использующих этот ORM.

1 Ответ

0 голосов
/ 08 мая 2019

Ваш код может работать, но удержание подписчиков в массиве может через некоторое время стать довольно уродливым.Запрашивать массив сложнее, и это займет больше времени.И вы не можете хранить некоторую важную информацию, например время отслеживания вашей схемы.
Что вы хотите сделать, так это создать другую сущность и сохранить идентификатор подписчика и подписчиков.Как этот:

import { Entity, Column, CreateDateColumn } from 'typeorm';

@Entity()
export class Subscription {

  @Column()
  userId: number;

  @Column()
  folowingId: number;

  @CreateDateColumn()
  createdAt: Date;

}

получение количества фолловеров или всех фолловеров теперь можно легко сделать, запросив эту сущность.

...