2

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

```

4

1 に答える 1

3

多対多の関係があり、belongsToMany関連付けを経由する必要があり、それ以上の関係は必要ありません。友達テーブルを定義する必要さえありません。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;
};
于 2016-09-13T09:13:18.327 に答える