У меня есть несколько сложный запрос для TypeORM, и я не уверен, как его достичь.
У меня есть объект Department, который может иметь 0 или много заданий (из объекта Job). При извлечении этой сущности и ее отношения с заданиями я хочу выбрать только 5 заданий, но я также хочу полностью избегать выбора этого, если нет заданий.
Прямо сейчас мой запрос выглядит так:
const repo = db.getRepository(Department)
const departments = (
await repo
.createQueryBuilder('department')
.leftJoinAndSelect('department.jobs', 'job')
.where({ 'department.companyId': company.id })
.orderBy('job.updatedAt', 'DESC')
.getMany()
).filter(department => department.jobs.length)
departments.forEach(department => (department.jobs = department.jobs.slice(0, 5)))
Мой код работает, но он неэффективен. Я пытался использовать take
, но я считаю, что он не работает со строителями реляционных запросов. Я также пытался limit
, но он возвращает неточные результаты.
Есть ли способ сделать всю эту логику c в конструкторе запросов?