续集包含关联不起作用(graphql)
Posted
技术标签:
【中文标题】续集包含关联不起作用(graphql)【英文标题】:Sequelize include association won't work (graphql) 【发布时间】:2020-02-08 04:13:13 【问题描述】:我有两个型号 User
和 FriendRequest
。 User
可以有多个FriendRequests
和FriendRequest
属于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 对象类型不起作用