TypeORM — это популярная библиотека объектно-реляционного сопоставления (ORM) для Node.js и TypeScript. Он обеспечивает удобный способ взаимодействия с базами данных путем абстрагирования базовых запросов SQL. При работе с отношениями в TypeORM вы можете столкнуться со сценариями, в которых вам необходимо эффективно загрузить определенное количество связанных элементов. В этой статье мы рассмотрим несколько способов достижения этой цели, а также приведем примеры кода.
Метод 1: использование метода find() с ограничением
import { getRepository } from 'typeorm';
const loadItems = async (): Promise<Item[]> => {
const itemRepository = getRepository(Item);
return itemRepository.find({
relations: ['relation1', 'relation2'],
take: 5,
});
};
Метод 2. Использование построителя запросов с ограничением
import { getRepository } from 'typeorm';
const loadItems = async (): Promise<Item[]> => {
const itemRepository = getRepository(Item);
return itemRepository
.createQueryBuilder('item')
.leftJoinAndSelect('item.relation1', 'relation1')
.leftJoinAndSelect('item.relation2', 'relation2')
.take(5)
.getMany();
};
Метод 3. Использование необработанных SQL-запросов
import { getConnection } from 'typeorm';
const loadItems = async (): Promise<Item[]> => {
const query = `
SELECT *
FROM item
LEFT JOIN relation1 ON item.relation1Id = relation1.id
LEFT JOIN relation2 ON item.relation2Id = relation2.id
LIMIT 5;
`;
const connection = getConnection();
return connection.query(query);
};
Метод 4. Отложенная загрузка с нумерацией страниц
import { getRepository } from 'typeorm';
const loadItems = async (): Promise<Item[]> => {
const itemRepository = getRepository(Item);
const items = await itemRepository.find();
const loadedItems = await Promise.all(
items.slice(0, 5).map((item) => itemRepository.loadRelation(item, 'relation1'))
);
return loadedItems;
};
В этой статье мы рассмотрели несколько методов эффективной загрузки 5 элементов отношений с использованием TypeORM в вашем приложении. В зависимости от вашего конкретного случая использования вы можете выбрать наиболее подходящий метод. Предоставленные примеры кода демонстрируют различные подходы, такие как использование метода find()с ограничением, построитель запросов, необработанные SQL-запросы и отложенную загрузку с нумерацией страниц. Используя эти методы, вы можете оптимизировать загрузку отношений в приложении на базе TypeORM.