You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS与GraphQL中CreateFavoriteInput与FavoriteDto匹配问题

解决CreateFavoriteInput与FavoriteDto的类型匹配问题
  • 问题根源:你的CreateFavoriteInput接收activityId作为入参,但返回的FavoriteDto只暴露了关联的activity对象字段,没有直接的activityId字段。所以当你在GraphQL请求中试图获取activityId时,就会触发字段不存在的错误。

  • 具体解决步骤:

    1. 修正GraphQL请求的返回字段:
      如果你的mutation返回类型是FavoriteDto,那么请求里不能直接写activityId,要改为请求activity嵌套字段里的id。示例:

      mutation CreateFavorite($input: CreateFavoriteInput!) {
        createFavorite(input: $input) {
          id
          activity {
            id
            # 其他你需要的Activity字段,比如name、startTime等
          }
        }
      }
      
    2. 完善后端数据关联逻辑:
      在处理创建收藏的业务逻辑时,需要通过传入的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
      }
      
    3. 可选:给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:03:10