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()ステートメントのプレースメントを切り替えると、テーブル内のフィールド名も逆になります。