2016-09-08 11 views
1

私は、through引数としてモデルを使用してsequelizeで自己参照のbelongsToMany関係を作成しています。Sequelize belongsToMany自己参照が外部キーを作成しない

ただし、テーブルを作成するときには、関係の1つのみの外部キーが作成されます。

モデル:

const client = sequelize.define('client', { 
    ClientId: { 
     type: DataTypes.UUID, 
     primaryKey: true, 
     allowNull: false, 
     defaultValue: DataTypes.UUIDV4() 
    }, 
    AccessMode: { 
     type: DataTypes.ENUM('allow_all', 'deny_all', 'selective'), 
     allowNull: false 
    } 
}, { 
    classMethods: { 
     associate: function (models) { 
      // Tons of other relationships here 

      client.belongsToMany(models.client, { 
       through: models.clientAccess, 
       as: 'clientsWithAccess', 
       foreignKey: 'ClientId' 
      }); 

      client.belongsToMany(models.client, { 
       through: models.clientAccess, 
       as: 'accessToClients', 
       foreignKey: 'AccessingClientId' 
      }); 

     } 
    } 

}); 

スルーモデル:

const clientAccess = sequelize.define('clientAccess', { 
    Access: { 
     type: DataTypes.ENUM('allow', 'deny'), 
     allowNull: false 
    } 
}, { 
    timestamps: false 
}); 

結果のテーブルのみの列アクセスモードとAccessingClientIdを有しています。何らかの理由でAccessingClientIdが主キーとして設定されています。

belongsToMany()ステートメントのプレースメントを切り替えると、テーブル内のフィールド名も逆になります。

答えて

0

これは、belongsToMany()メソッドのotherKeyプロパティを使用して解決されました。

 client.belongsToMany(models.client, { 
      through: models.clientAccess, 
      as: 'clientsWithAccess', 
      foreignKey: 'ClientId', 
      otherKey: 'AccessingClientId' 
     }); 

     client.belongsToMany(models.client, { 
      through: models.clientAccess, 
      as: 'accessToClients', 
      foreignKey: 'AccessingClientId', 
      otherKey: 'ClientId' 
     }); 

これで、データベースにテーブルが正しく作成されました。

関連する問題