Освоение функции «RelationId» в TypeORM: упростите запросы к базе данных

  1. Понимание «RelationId»:
    Прежде чем углубиться в примеры кода, давайте разберемся с концепцией «RelationId». В TypeORM отношение представляет собой связь между двумя объектами (таблицами), например связь «один-к-одному» или «один-ко-многим». Функция «RelationId» позволяет нам получить идентификатор (ID) связанного объекта без загрузки всего объекта, тем самым повышая производительность и сокращая ненужную передачу данных.

  2. Извлечение RelationId с помощью базовых связей.
    Давайте начнем с простого примера связи «один к одному» между двумя объектами: пользователем и профилем. Предположим, что с каждым пользователем связан уникальный профиль. Чтобы получить идентификаторы профилей всех пользователей, мы можем использовать декоратор RelationId следующим образом:

@Entity()
class User {
  // ...

  @OneToOne(type => Profile)
  @JoinColumn()
  profile: Profile;
  @RelationId((user: User) => user.profile)
  profileId: number;
}

С помощью приведенного выше кода доступ к свойству profileIdэкземпляра Userдаст нам идентификатор связанного профиля.

  1. Получение RelationId с помощью отношений «многие к одному».
    В отношениях «многие к одному» несколько объектов одного типа связаны с одним объектом другого типа. Давайте рассмотрим пример сообщения в блоге и его автора. Каждая запись в блоге принадлежит конкретному автору. Чтобы получить идентификаторы авторов всех сообщений в блоге, мы можем использовать декоратор RelationId, как показано ниже:
@Entity()
class BlogPost {
  // ...

  @ManyToOne(type => Author)
  author: Author;
  @RelationId((blogPost: BlogPost) => blogPost.author)
  authorId: number;
}

Обратившись к свойству authorIdэкземпляра BlogPost, мы можем получить связанный идентификатор автора.

  1. Использование RelationId с отношениями «многие-ко-многим».
    Отношения «многие-ко-многим» включают в себя несколько объектов обоих типов. Предположим, у нас есть сущности, представляющие студентов и курсы, с отношениями «многие ко многим» между ними. Чтобы получить идентификаторы курсов всех студентов, мы можем использовать функцию RelationId, как показано ниже:
@Entity()
class Student {
  // ...

  @ManyToMany(type => Course)
  @JoinTable()
  courses: Course[];
  @RelationId((student: Student) => student.courses)
  courseIds: number[];
}

Теперь свойство courseIdsэкземпляра Studentпредоставит массив всех связанных идентификаторов курсов.

В этой статье мы рассмотрели мощную функцию RelationId в TypeORM, которая упрощает получение идентификаторов связанных объектов. Мы рассмотрели его использование с отношениями «один к одному», «многие к одному» и «многие ко многим», попутно приводя примеры кода. Используя декоратор RelationId, вы можете оптимизировать запросы к базе данных, повысить производительность и сократить ненужную передачу данных. Включите эту функцию в свои проекты TypeORM, и ваш код станет более кратким и эффективным.

Не забывайте использовать функцию RelationId всякий раз, когда вам нужно получить идентификаторы связанных объектов в TypeORM, и наслаждайтесь оптимизированным запросом к базе данных!