遇到复杂的查询需要,Repository 可能就不太够用了,我们可以创建一个 QueryBuilder 来构建需要的查询。
打开 GetUserQueryHandler,这里之前我们用了一个 Repository 里的 findOne 查询出指定 id 的数据记录。下面我们可以使用 QueryBuilder 实现同样的需求。
返回的数据,用一下 this.userRepository.createQueryBuilder 创建一个查询构建器,提供一个别名,比如 user。接着可以再用一下查询构造方法里的 select 方法,选择需要的字段,提供一个数组,需要 user.id ,还有 user.name。
下面再用 where 设置一下查询条件,这里就是 user.id 等于 :userId ,后面可以给这个 userId 查询一个值,这里就是在上面从查询参数里解构出来的这个 id。
最后再调用一下 getOne 这个方法。
测试
在 Http 客户端,再发送一下这个单个用户请求,这次返回的结果是我们用查询构建器查询出来的数据,里面有用户的 id 还有 name 这两个字段的值。