在 Http 客户端,新建一个请求,地址是 http://localhost:3000, users/1 ,返回的是指定的用户相关的数据。现在我希望可以在这个数据里加上用户的头像。
回到项目,打开 UserService ,找到这个服务里的 show 方法, 这里用的是 Repository 上的 findOne 找到了指定的用户,在 relations 里面,可以添加一个 avatar 这个关系,这个关系是之前我们在用户实体上定义好的。
回到 Http 客户端,重新发送一下这个请求,你会发现这次请求回来的数据里面,就会带着 avatar ,它里面的东西就是用户上传的头像。
下面可以改进一下返回的这个头像数据。 回到项目,先删除掉给 findOne 方法提供的这个 relations 。
在下面可以定义一 queryBuilder,创建它可以使用 this.userRepository 上的 createQueryBuilder ,给它一个 user 。
再添加一个 avatarQueryResult,它的值用一下 queryBuilder ,先用 where 设置一个查询条件,条件是 user.id 等于 :id,后面设置一下 :id 参数的值,这里应该就是 id 。
然后用 leftJoinAndSelect 方法,join 的是 user.avatar,别名设置成 avatar。
再用 select 设置一下需要的字段,需要 user.id 还有 avatar 的 id 号。
然后用 orderBy 排下顺序,按 avatar.id 排序,类型是 DESC。 接着再用 limit 只需要一条数据。最后再用 getOne 得到查询的结果。
下面添加一个 user,一个对象,里面先把 ...entity 里的东西放进来,然后再添加一个 avatar 属性,对应的值可以判断一下 avatarQueryResult 里的 avatar 属性,它里面的第一个项目,如果有,就让用户的 avatar 的值等于 avatarQueryResult 里的 avatar 里的第一个项目。 不然就让 avatar 的值等于 null 。
最后让这个方法 return 这个 user。
回到 Http 客户端再试一下,重新请求一下这个用户。 这回得到的响应的数据里面,avatar 属性的值会是一个对象,里面只有一个 id 属性。