私は移行のためにsequelize-cliを使用していますが、さまざまなシナリオを調査していますが、セルフ・ジョインの方法については確かな確かな答えはないようです。私はユーザーと友人(本質的に単なるユーザー)に加わる友情という結合テーブルを持っていたいと思います。ノードでSequelizeを使用してSELF JOINする方法
具体的には、この状況で「スルー」と「アズ」の違いを理解しようとしています。
1)これは私の友情テーブルです。取得は第二の協会でトリップしました。私は2つの列を作成しました.1つはuserId、もう1つはfriendIdです。私は、このテーブルを2人のユーザーにリンクさせたいと考えています。各ユーザーは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を呼び出し、そのユーザーの友達のすべてのインスタンスを表示できるようにすることです。私は、 "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;
};
` ``
をテーブルを作成します、ではありません........が、それはです友人のコントローラで空の配列を返します。ここにはそのコントローラの最初の6行程度があります。 ' するvar friendshipController = { 度:関数(REQ、RES){ user.findById(3).then(関数(ユーザ){ user.getFriends()を(関数(友人){ 。コンソールログは空の配列を返しますが、友情テーブルを見ると、私はuserId 3とuserId 1でシードされた友情があります。 –
実行するSQLクエリを記録しようとします。 '.getFriends({logging:console.log})' checkはクエリーOKです –