极客教程-前端开发Web前端之路让前端飞

Nest.js学习之路(19)-TypeORM(6)Query

2019-06-27  本文已影响0人  cbw100

TypeORM Repository已经写好常用对资料库新增、修改、搜寻(find说明文件)、删除资料
TypeORM Repository API列表

如果要更细部的建立Query,TypeORM提供Query Builder相关API,以API的方式去组SQL Query,比较弹性。

使用QueryBuilder只要在注入的repository变数呼叫createQueryBuilder,

例如要以平台名称搜寻使用者,并按照使用者名称排序

新增getUsersByPlatformName于users.service.ts

async getUsersByPlatformName(platformName: string){
        return await this.userRepo
            .createQueryBuilder('u') // 指定User別名为u
            // 指定join user的roles关联属性,并指定別名为r,并设定搜寻条件
            .leftJoinAndSelect('u.roles', 'r')
            // 指定join user的dep關聯屬性,并指定別名為d,並設定搜尋條件
            .leftJoinAndSelect('u.plat', 'p')
            // 設定條件
            .where('p.isActive = :isActive', {isActive: true})
            .andWhere('p.platformName like :name', { name: `%${platformName.toLowerCase()}%`})
            // 以age降幂排序
            .orderBy('age', 'DESC')
            // 回传多笔资料
            .getMany();
            // 回传上面API所组出來的Raw SQL, debug用
            // .getSql()
     }

到user.controller.ts新增路由

@Get('query/user')
  queryByPlatformName(@Query('platformName') platformName){
    return this.userService.getUsersByPlatformName(platformName);
  }

使用postman测试,如下图


2018111405.png

实际数据


2018111406.png

下一章继续。

推荐一下我的公众号: 【 geekjc 】,微信号: 【 c8706288 】一起学习交流编程知识,分享经验,各种有趣的事。

tuiguang.png
上一篇下一篇

猜你喜欢

热点阅读