typeorm querybuilder: выберите только отношение - PullRequest
0 голосов
/ 19 марта 2020

Итак, у меня есть эти сущности:

Group {
    id: number;
    name: string;
    persons: Person[];
}

Person {
    name: string;
    items: Item[];
}

Item {
    name: string;
    active: boolean;
}

Что у меня есть в наличии : массив идентификаторов групп groupIds.

Моя цель : получить массив Item, но только тот, который содержится в группе, которая group.id находится в массиве групп, который у меня есть, а также имеет свойство active true.



Я пытался построить построитель запросов, например, так:

this.groupRepository.createQueryBuilder('group')
                      .innerJoin('group.persons', 'persons')
                      .innerJoinAndSelect('persons.items', 'items')
                      .where({'items.active': true, 'group.id': In(groupIds)})
                      .getMany();

Но я получаю только массив group (без каких-либо отношений), в котором есть действительный item.

Что мне нужно изменить, если это возможно даже одним запросом?

1 Ответ

2 голосов
/ 20 марта 2020

Попробуйте использовать это:

 this.groupRepository.createQueryBuilder('group')
   .leftJoinAndSelect('group.persons', 'persons')
   .leftJoinAndSelect('persons.items', 'items')
   .where('items.active =:active', {active: true})
   .andWhere('group.id IN (:...groupIds)', {groupIds})       
   .getMany();
...