续集包含关联不起作用(graphql)

Posted

技术标签:

【中文标题】续集包含关联不起作用(graphql)【英文标题】:Sequelize include association won't work (graphql) 【发布时间】:2020-02-08 04:13:13 【问题描述】:

我有两个型号 UserFriendRequestUser 可以有多个FriendRequestsFriendRequest 属于User。当我尝试 User.findOne 并包含 FriendRequest 我得到 ​​p>


  ...
  FriendRequest: null

模型/User.js

  const User = sequelize.define(
    "User",
    
      ...
    ,
    
      tableName: "users"
    
  );
  User.associate = function(models) 
    // associations can be defined here
    User.hasMany(models.FriendRequest);
  ;

models/FriendRequest.js

"use strict";
module.exports = (sequelize, DataTypes) => 
  const FriendRequest = sequelize.define(
    "FriendRequest",
    
      senderId: DataTypes.INTEGER,
      receiverId: DataTypes.INTEGER,
      status: DataTypes.INTEGER,
      UserId: DataTypes.INTEGER
    ,
    
      tableName: "friend_requests"
    
  );
  FriendRequest.associate = function(models) 
    FriendRequest.belongsTo(models.User);
    // associations can be defined here
  ;
  return FriendRequest;
;

graphql-modules/user.js

  type User 
    ...
    FriendRequest: [FriendRequest]
  

graphql-modules/friend_request.js

  type FriendRequest 
    id: Int!
    senderId: Int!
    receiverId: Int!
    status: Int!
    UserId: Int!
  

服务/users_service.js

let searchUser = async (args) => 
  try 
    let user = await User.findOne(
        where: args,
        include: [
          
            model: FriendRequest
          
        ]
      );
      let request = await FriendRequest.findAll( where:  UserId: args.id  );
      console.log(request);
    return user;
   catch (err) 
    throw new Error(err);
  
;

在上面,我添加了请求变量以查看是否可以查询 FriendRequest,是的,我得到了正确的结果。

我也试过了

include: [
          
            model: FriendRequest,
            where: UserId: args.id
          
        ]

但它返回 user=null;

我需要用户变量来返回一个 FriendRequests 数组。 这些行存在于数据库中: Id senderId receiverId status UserId 7 5 2 0 5

【问题讨论】:

【参考方案1】:

有同样的问题,问题是 Sequelize 生成的关联的复数名称保持首字母大写,所以为了解决这个问题,我使用了关联的别名。

// models/User.js
User.hasMany(models.FriendRequest, 
  as: 'friendRequests'
);

// graphql-modules/user.js
type User 
  ...
  friendRequests: [FriendRequest]


// services/users_service.js
User.findOne(
  where: args,
  include: [
    
      model: FriendRequest,
      as: 'friendRequests'
    
  ]
);

【讨论】:

谢谢!已经为此苦苦挣扎了几天。 很高兴我能帮上忙 :)

以上是关于续集包含关联不起作用(graphql)的主要内容,如果未能解决你的问题,请参考以下文章

在 MySql 数据库中将 primaryKey 续集为 UUID - 不起作用

GraphQL - 如果父返回类型是对象列表,则模式拼接上的模式委派不起作用

对续集关联一对​​多和一对一单向感到困惑

在 .graphql 文件中定义 GraphQL 对象类型不起作用

NestJS + Mongoose + GraphQL:“填充”不起作用

Apollo GraphQL 数据解构不起作用