Sequelize.js 无法正确使用多对多使用belongtomy
一段时间以来,我一直在努力解决这个问题。我了解到,当试图建立多对多关联时,Sequelize.js 无法正确使用多对多使用belongtomy,sequelize.js,Sequelize.js,一段时间以来,我一直在努力解决这个问题。我了解到,当试图建立多对多关联时,hasMany不是正确的方法。我有两个表来创建以下关联User和Follower(目前这个名称很糟糕) 追随者 const follower = (sequelize, DataTypes) => { const Follower = sequelize.define('follower', { follower_id: { type: DataTypes.INTEGER,
hasMany
不是正确的方法。我有两个表来创建以下关联User
和Follower
(目前这个名称很糟糕)
追随者
const follower = (sequelize, DataTypes) => {
const Follower = sequelize.define('follower', {
follower_id: {
type: DataTypes.INTEGER,
allowNull: false,
validate: {
notNull: true
}
},
following_id: {
type: DataTypes.INTEGER,
allowNull: false,
validate: {
notNull: true
}
}
});
return Follower;
};
module.exports = follower;
接下来是用户模型
const user = (sequelize, DataTypes) => {
const User = sequelize.define('user', {
email: {
type: DataTypes.STRING,
unique: true,
allowNull: false,
validate: {
isEmail: true,
notEmpty: true
}
},
password: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
username: {
type: DataTypes.STRING,
unique: true,
allowNull: false
}
});
User.associate = (models) => {
User.hasMany(models.post, { foreignKey: 'user_id' });
User.belongsToMany(models.user, {
through: 'users_followers',
foreignKey: 'follower_id',
otherKey: 'following_id',
as: 'followers',
});
User.belongsToMany(models.user, {
through: 'users_followers',
foreignKey: 'following_id',
otherKey: 'follower_id',
as: 'following',
});
return User;
};
module.exports = user;
我在创建多对多协会方面是否做错了什么?我之所以这样问,是因为我一直在尝试差异变化,但在尝试包括:[db.follower]
谢谢你的帮助
其他信息
正在运行的查询是:
const fetchUser = async (root, args, context) => {
const { db, user } = await context();
const { id } = args;
const fetchedUser = await db.user.findOne({
attributes: {
include: [
[sequelize.literal('(select count(*) from users_followers where users_followers.follower_id=users.id)'), 'followers_count'],
]
},
include: [
'followers',
'following'
],
where: {
id
},
raw: true
});
return fetchedUser;
在
include
选项中,您应始终指示位于已定义关联另一侧的模型。在这种情况下,它是具有两个不同别名的User
模型:
包括:[
{
型号:db.user,
如:“追随者”
}, {
型号:db.user,
如:'以下'
}],
显示您正在尝试的查询-many@Anatoly谢谢你的回复。在问题的底部,我添加了一个查询,我正在运行many to many tank you以获取此信息。虽然我有两个问题。目前,它没有返回任何值(followers/followering info为null),即使我的子查询准确地返回了用户的followers/followering数量。还有什么我需要包括的吗?我尝试在第二个表中添加where子句,结果得到“column following.follower\u id不存在”
不确定为什么它会在应该是用户\u followers的时候提到下表。再次感谢您的帮助和提示。您可以检查并比较Sequelize生成的SQL与您自己的SQL