-
Понимание «RelationId»:
Прежде чем углубиться в примеры кода, давайте разберемся с концепцией «RelationId». В TypeORM отношение представляет собой связь между двумя объектами (таблицами), например связь «один-к-одному» или «один-ко-многим». Функция «RelationId» позволяет нам получить идентификатор (ID) связанного объекта без загрузки всего объекта, тем самым повышая производительность и сокращая ненужную передачу данных. -
Извлечение RelationId с помощью базовых связей.
Давайте начнем с простого примера связи «один к одному» между двумя объектами: пользователем и профилем. Предположим, что с каждым пользователем связан уникальный профиль. Чтобы получить идентификаторы профилей всех пользователей, мы можем использовать декоратор RelationId следующим образом:
@Entity()
class User {
// ...
@OneToOne(type => Profile)
@JoinColumn()
profile: Profile;
@RelationId((user: User) => user.profile)
profileId: number;
}
С помощью приведенного выше кода доступ к свойству profileIdэкземпляра Userдаст нам идентификатор связанного профиля.
- Получение RelationId с помощью отношений «многие к одному».
В отношениях «многие к одному» несколько объектов одного типа связаны с одним объектом другого типа. Давайте рассмотрим пример сообщения в блоге и его автора. Каждая запись в блоге принадлежит конкретному автору. Чтобы получить идентификаторы авторов всех сообщений в блоге, мы можем использовать декоратор RelationId, как показано ниже:
@Entity()
class BlogPost {
// ...
@ManyToOne(type => Author)
author: Author;
@RelationId((blogPost: BlogPost) => blogPost.author)
authorId: number;
}
Обратившись к свойству authorIdэкземпляра BlogPost, мы можем получить связанный идентификатор автора.
- Использование 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, и наслаждайтесь оптимизированным запросом к базе данных!