[英]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.