我正在使用 sequelize-cli 进行迁移,并研究了不同的场景,但似乎没有关于如何自我加入的明确可靠答案。我想要一个名为 Friendships 的连接表,它连接用户和朋友(本质上只是用户)。
更具体地说,试图了解在这种情况下“通过”和“作为”之间的区别。
1)这是我的友谊表。被第二个协会绊倒了。我创建了两列,一列是 userId,一列是friendId。我希望能够将此表链接到 2 个用户,每个表中有一个用户,其中一列别名为“friendId”。
```
'use strict';
module.exports = function(sequelize, DataTypes) {
var friendship = sequelize.define('friendship', {
userId: DataTypes.INTEGER,
friendId: DataTypes.INTEGER
}, {
classMethods: {
associate: function(models) {
friendship.belongsTo(models.user);
friendship.belongsTo(models.user { as: "friend" });
}
}
});
return friendship;
};
```
2)这是我的用户模型。同样,具体在关联对象中我不清楚的地方。这里的目标是能够调用 user.friends 并显示该用户朋友的所有实例。不确定我是否正确使用了“through”和“as”关键字。
```
'use strict';
module.exports = function(sequelize, DataTypes) {
var user = sequelize.define('user', {
username: DataTypes.STRING,
password: DataTypes.STRING,
email: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
user.hasMany(models.friendship);
user.hasMany(models.user { as: "friends", through: models.friendship });
}
}
});
return user;
};
```