如何使用TypeORM的QueryBuilder编写此查询?

时间:2019-01-12 22:21:02

标签: mysql typescript nestjs typeorm

我直接在mySQL服务器上运行了这段代码,我得到了想要的结果,现在如何使用typeORM的queryBuilder在我的代码中复制它呢?

SELECT user.id, user.email, user.image, user.phone_number, 
user.merchantLocationId, ugg.userGroupsId AS groupId, ug.description AS 
groupName, ur.id as roleId, ur.description AS role_name, ugr.priviledges
FROM ipay.user, ipay.user_user_group_user_groups AS ugg, 
ipay.user_group_roles AS ugr, ipay.user_groups AS ug, 
ipay.user_roles AS ur
WHERE user.id = ugg.userId AND ugg.userGroupsId = ugr.group_id AND 
ugr.role_id = ur.id AND user.email = "press@xyz.com";

1 个答案:

答案 0 :(得分:0)

将这种查询转换为typeorm有点困难。我能给出的最接近的例子就是这样

@Injectable()
export class UserService {
  constructor(@InjectRepository(User) private readonly userRepository: Repository<User>) {}

  async findUserByEmail(email: string): Promise<User | null> {
    return await this.userRepository({
      relations: ['roles', 'groups'],
      where: {
        email,
      },
    });
  }
}

您的UserEntity如下所示

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({
    unique: true,
  })
  email: string;

  @ManyToMany(type => Group, group => group.users)
  groups: Group[];

  @ManyToOne(type => Role, role => role.users)
  role: Role;
}

这不是精确匹配,但希望能给您一些有关如何实现查询的见识。