typescript - Begränsa och hoppa över relaterad kolumn i typeorm


Jag försöker begränsa de relaterade uppgifterna när jag söker med frågebyggaren, men jag saknar konceptet.

Här är min kod för att hämta anställdas beställningar:

import { getRepository, Repository } from "typeorm";

    public async findEmployeeQuery(id : number) {
        try {
            let query = await getRepository(Employees)
            .createQueryBuilder('employee')
            .where('employee.id = :id' , {id})
            .leftJoinAndSelect('employee.customers' , 'customers')
            .getOne()
            const user = query
            return user
        } catch (error) {
            throw error
        }

    }

Nu vill jag begränsa antalet kunder för varje förfrågan - hur kan jag göra det?

Jag försökte med alternativen limit och skip, men detta fungerar bara med anställda, inte med de sammanfogade uppgifterna.

Svar #1

Du måste göra en annan förfrågan för att begränsa kunder:

import { getRepository, Repository } from "typeorm";

public async findEmployeeQuery(id : number) {
    try {
        let user = await getRepository(Employees)
        .createQueryBuilder('employee')
        .where('employee.id = :id' , {id});
        .getOne()

        user.customers = await getRepository(Customers)
        .createQueryBuilder('customer')
        .where('customer.employee= :id' , {user.id});
        .limit(10) // here you set limitation you want 
        .getMany()

        return user;
    } catch (error) {
        throw error
    }
}

Svar #2

Jag tror att jag har hittat ett rent sätt för detta...

Kan vara till hjälp för någon eftersom TypeORM inte stöder sidindelning i relationer (låt oss hoppas att de lägger till det snart! =) )

 let category: any = await Category.findOne({
      where: {
        id: id,
      },
    });
    // finding products linked to that category
    let products = await orm
      .createQueryBuilder("products", "p")
      .innerJoinAndSelect("p.categories", "c", "c.id = :categoryId", {
        categoryId: id,
      })
      // implementing pagination
      .skip(offset)
      .take(limit)
      .getMany();
    // Attaching the array to the Category Object
    category.products = products;

Relaterade artiklar