如何修改Prisma查询的返回类型,移除嵌套层级?
修改Prisma查询以直接返回视频对象结构
你当前的查询是从academy_user_like_videos表拉取关联的视频数据,所以返回结果会嵌套在academy_videos字段里。要得到你期望的扁平结构,有两种简单可行的方法:
方法一:查询后处理结果(最直接的修改方式)
执行完原查询后,用数组map方法提取每个项里的academy_videos对象:
const likedVideos = await prisma.academy_user_like_videos .findMany({ where: { user_id: 2587, }, orderBy: { created_ts: "desc", }, select: { academy_videos: true, } }) .then(results => results.map(item => item.academy_videos));
这样likedVideos就是你想要的视频对象数组;如果只需要最新的那一条视频,直接取results[0]?.academy_videos即可。
方法二:反向查询academy_videos表(更贴合需求的写法)
既然目标是获取用户喜欢的视频,直接从academy_videos表出发,通过关联的academy_user_like_videos筛选目标用户,返回结果就是直接的视频对象:
const likedVideos = await prisma.academy_videos.findMany({ where: { academy_user_like_videos: { some: { user_id: 2587 } } }, orderBy: { academy_user_like_videos: { created_ts: "desc" } } });
这种写法不需要额外的结果处理,直接得到符合结构的视频数组。如果只需要单个最新视频,把findMany换成findFirst就行:
const latestLikedVideo = await prisma.academy_videos.findFirst({ where: { academy_user_like_videos: { some: { user_id: 2587 } } }, orderBy: { academy_user_like_videos: { created_ts: "desc" } } });
内容的提问来源于stack exchange,提问作者Haseeb
相关产品推荐
相关产品推荐

