[英]How create relations in Sequelize
如何在表users
和user_friend
之間創建正確的關系? 我想向user_friends
表發出加入請求。
var User = db.define('users', {
userId: {
primaryKey: true,
autoIncrement: true,
type: Sequelize.INTEGER,
allowNull: false,
field: 'user_id'
},
login: {
type: Sequelize.STRING,
isUnique: true
}
}, {
freezeTableName: true,
classMethods: {
associate: function (models) {
User.hasMany(models.UserFriend, { as: 'Friends', foreignKey: 'user' });
}
}
});
var UserFriend = db.define('user_friend', {
user: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'users',
key: 'user_id'
}
},
friend: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'users',
key: 'user_id'
}
}
}, {
freezeTableName: true,
classMethods: {
associate: function (models) {
UserFriend.belongsTo(models.User, { foreignKey: 'user_id', targetKey: 'user' });
UserFriend.belongsTo(models.User, { foreignKey: 'user_id', targetKey: 'friend' });
}
}
});
User.friends = function (id) {
return UserFriend.findAll({
where: { user: id },
include: [
{ model: User }
]
});
};
當我致電User.friends(1)
時拋出錯誤
Unhandled rejection Error: users is not associated to user_friend!
我的解決方案
var User = db.define('users', {
userId: {
primaryKey: true,
autoIncrement: true,
type: Sequelize.INTEGER,
allowNull: false,
field: 'user_id'
},
login: {
type: Sequelize.STRING,
isUnique: true
}
});
var Friendship = db.define('friendship', {
user: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'users',
key: 'user_id'
}
},
friend: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'users',
key: 'user_id'
}
}
});
Friendship.belongsTo(User, { as: 'info', foreignKey: 'friend' });
User.belongsToMany(User, { as: 'friendship', through: Friendship, foreignKey: 'user', otherKey: 'friend' });
User.hasMany(Friendship, { as: 'friends', foreignKey: 'user' });
然后你可以得到這樣的朋友
Friendship.findAll({
where: { user: id },
include: [{
model: User,
as: 'info'
}]
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.