我有以下GraphQL查询:
{
events {
name
images {
uri
}
}
}
当前,我无法(不知道如何)在该images
字段中处理分页,因为它是使用DataLoader提取的。
eventImagesLoader
(DataLoader)实现如下:
import DataLoader from 'dataloader';
import { getRepository } from 'typeorm';
import { EventImage } from '../entities/event-image';
export const eventImagesLoader = () =>
new DataLoader<string, EventImage[]>(async (eventIds) => {
const images = await getRepository(EventImage)
.createQueryBuilder('image')
.where('image.eventId IN (:...ids)', { ids: eventIds })
.getMany();
const imagesMap = new Map<string, EventImage[]>();
images.forEach((image) =>
imagesMap.has(image.eventId)
? imagesMap.get(image.eventId)!.push(image)
: imagesMap.set(image.eventId, [image])
);
return eventIds.map((eventId) => imagesMap.get(eventId) || []);
});
我面临的问题是在这种情况下处理分页,因为如果您在上面的代码摘录中看到,我将以这种方式查询数据库:
const images = await getRepository(EventImage)
.createQueryBuilder('image')
.where('image.eventId IN (:...ids)', { ids: eventIds })
.getMany();
翻译成这样的SQL:
SELECT * FROM `event_image` AS image WHERE image.id IN ("id:1", "id:2", "id:n");
在这种情况下,我使用DataLoader将所有数据库查询批处理为一个(上面的一个)。
因此,我如何处理分页?
我想做这样的事情:
{
events {
name
images(page: Int) {
uri
}
}
}