私は移行にsequelize-cliを使用しており、さまざまなシナリオを調査しましたが、自己参加する方法について明確な確固たる答えはないようです. ユーザーと友人 (基本的には単なるユーザー) を結合する、friendships という名前の結合テーブルが必要です。
より具体的には、この状況での「スルー」と「として」の違いについて理解しようとしています。
1) これは私の友情表です。2 番目の関連付けにつまずく。2 つの列を作成しました。1 つは userId で、もう 1 つは friendId です。このテーブルを 2 人のユーザー (各テーブルに 1 人ずつ) にリンクし、1 つの列を "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 を呼び出して、そのユーザーの友達のすべてのインスタンスを表示できるようにすることです。「スルー」および「として」キーワードを正しく使用しているかどうかはわかりません。
```
'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;
};
```