简体   繁体   English

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

[英]Sequelize include association won't work (graphql)

I have two models User and FriendRequest .我有两个模型UserFriendRequest User can have many FriendRequests and FriendRequest belongs to User . User可以有许多FriendRequestsFriendRequest属于User When I try to User.findOne and include FriendRequest I get当我尝试User.findOne并包含FriendRequest我得到

{
  ...
  FriendRequest: null
}

models/User.js模型/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模型/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 graphql-modules/user.js

  type User {
    ...
    FriendRequest: [FriendRequest]
  }

graphql-modules/friend_request.js graphql-modules/friend_request.js

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

services/users_service.js服务/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);
  }
};

Above, I added the request variable to see if I can query FriendRequest and yes I got the correct results.上面,我添加了请求变量以查看是否可以查询 FriendRequest,是的,我得到了正确的结果。

I also tried to do我也尝试过

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

But it returns user=null;但它返回 user=null;

I need the user variable to return an array of FriendRequests.我需要用户变量来返回一个 FriendRequests 数组。 The rows exist on the database: Id senderId receiverId status UserId 7 5 2 0 5数据库中存在的行: Id senderId receiverId status UserId 7 5 2 0 5

Had the same issue, the problem is that Sequelize generates the plural name of the association keeping the first letter capital, so to solve it I used an alias for the association.有同样的问题,问题是 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'
    }
  ]
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM