Вернуть специфицированного пользователя c, если присутствует опция uid, иначе вернуть весь список пользователей. - PullRequest
0 голосов
/ 28 января 2020

у меня есть следующий код

async findAllUser(uid: number): Promise<User[]> {
    const users = await this.userRepository.createQueryBuilder('u')
      .where('u.id = :id', { id: uid })
      .leftJoinAndSelect('u.userRole', 'userRole')
      .leftJoinAndSelect('userRole.role', 'role')
      .leftJoinAndSelect('u.userAccess', 'userAccess')
      .leftJoinAndMapOne('u.profile', UserProfile, 'userProfile', 'userProfile.user_id=u.id')
      .getMany();
    return users;
  }

если uid равен нулю, тогда извлекает все записи пользователя, если присутствует uid, извлекает только одну запись пользователя. Как этого добиться.

1 Ответ

0 голосов
/ 28 января 2020

Одна вещь, которую вы можете сделать, это динамически добавить атрибут where к запросу, например, так:

async findAll(uid: number): Promise<User[]> {
  const usersQuery = this.userRepository.createQueryBuilder('u')
    .leftJoinAndSelect('u.userRole', 'userRole')
      .leftJoinAndSelect('userRole.role', 'role')
      .leftJoinAndSelect('u.userAccess', 'userAccess')
      .leftJoinAndMapOne('u.profile', UserProfile, 'userProfile', 'userProfile.user_id=u.id');
  if (uid) {
    usersQuery.where('u.id = :id', {id: uid});
  }
  return usersQuery.getMany();
}

Теперь, если uid передается функции findAll, условие where будет установлен, в противном случае без указания where запрос получит всех пользователей. Кроме того, теперь вы можете просто вернуть запрос с .getMany(), и node даст await результат для вас, чтобы вы вернули обещание.

...