[英]Find based on association, but don't include association in result in Sequelize
[英]Sequelize include association won't work (graphql)
我有两个模型User
和FriendRequest
。 User
可以有许多FriendRequests
和FriendRequest
属于User
。 当我尝试User.findOne
并包含FriendRequest
我得到
{
...
FriendRequest: null
}
const User = sequelize.define(
"User",
{
...
},
{
tableName: "users"
}
);
User.associate = function(models) {
// associations can be defined here
User.hasMany(models.FriendRequest);
};
"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;
};
type User {
...
FriendRequest: [FriendRequest]
}
type FriendRequest {
id: Int!
senderId: Int!
receiverId: Int!
status: Int!
UserId: Int!
}
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
有同样的问题,问题是 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.