NestJS与GraphQL中CreateFavoriteInput与FavoriteDto匹配问题
解决CreateFavoriteInput与FavoriteDto的类型匹配问题
问题根源:你的
CreateFavoriteInput接收activityId作为入参,但返回的FavoriteDto只暴露了关联的activity对象字段,没有直接的activityId字段。所以当你在GraphQL请求中试图获取activityId时,就会触发字段不存在的错误。具体解决步骤:
修正GraphQL请求的返回字段:
如果你的mutation返回类型是FavoriteDto,那么请求里不能直接写activityId,要改为请求activity嵌套字段里的id。示例:mutation CreateFavorite($input: CreateFavoriteInput!) { createFavorite(input: $input) { id activity { id # 其他你需要的Activity字段,比如name、startTime等 } } }完善后端数据关联逻辑:
在处理创建收藏的业务逻辑时,需要通过传入的activityId查询对应的Activity实体,将其关联到新创建的Favorite记录中,这样FavoriteDto的activity字段才能正确填充数据。伪代码示例:// 假设使用Spring Data + MapStruct public FavoriteDto createFavorite(CreateFavoriteInput input, Long userId) { Activity activity = activityRepo.findById(input.getActivityId()) .orElseThrow(() -> new RuntimeException("活动不存在")); Favorite favorite = new Favorite(); favorite.setUserId(userId); favorite.setActivity(activity); favorite = favoriteRepo.save(favorite); return favoriteMapper.toDto(favorite); // 确保mapper将activity映射为ActivityDto }可选:给FavoriteDto添加activityId字段:
如果确实需要直接返回activityId,可以在FavoriteDto中新增activityId字段,同时确保映射逻辑能从关联的Activity对象中提取id值。比如在MapStruct的mapper里添加:@Mapping(source = "activity.id", target = "activityId") FavoriteDto toDto(Favorite favorite);这样GraphQL请求里就能同时请求
activityId和activity字段了。
内容的提问来源于stack exchange,提问作者etrix
相关产品推荐
相关产品推荐

