0

私は移行のために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; 
}; 

` ``

答えて

0

多対多の関係があり、それはより多くの関係を必要としない、belongsToMany団体を経る必要があります。そこでも、友人のテーブルを定義する必要はおかげで、私は今user.getFriends()。その後、(機能(友人))にアクセスすることができますsequelizeは自動的に

'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.belongsToMany(models.user, { 
       as: "friends", 
       through: "friendship", 
       foreignKey: "userId", 
       otherKey: "friendId" 
      }); 
      } 
     } 
     }); 
     return user; 
}; 
+0

をテーブルを作成します、ではありません........が、それはです友人のコントローラで空の配列を返します。ここにはそのコントローラの最初の6行程度があります。 ' するvar friendshipController = { 度:関数(REQ、RES){ user.findById(3).then(関数(ユーザ){ user.getFriends()を(関数(友人){ 。コンソールログは空の配列を返しますが、友情テーブルを見ると、私はuserId 3とuserId 1でシードされた友情があります。 –

+0

実行するSQLクエリを記録しようとします。 '.getFriends({logging:console.log})' checkはクエリーOKです –

関連する問題