我已经通过名称labels_association定义了表的模式,它将标签和模型X关联起来如下:
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('labels_association', {
labelId: {
allowNull: false,
type: Sequelize.INTEGER
},
associationId: {
allowNull: false,
type: Sequelize.INTEGER
},
associationType: {
allowNull: false,
type: Sequelize.ENUM('x', 'y')
}
});
},
down: function(queryInterface) {
return queryInterface.dropTable('labels_association');
}
};
通过labels_association表
定义has并属于模型X与标签的许多关系X.belongsToMany(Label, {
as: 'labels',
through: {
model: 'labels_association',
attributes: ['associationId', 'associationType'],
scope: {
associationType: 'x'
}
},
foreignKey: 'associationId',
otherKey: 'labelId'
});
虽然在为模型X的实例设置标签时,我无法将associationType设置为'x',而它应该已经由belongsToMany关联中的scope属性处理。
instanceOfX.setLabels(labelIds, {
associationType: 'x'
})
如何在上面的场景中将associationType设置为值'x'?
答案 0 :(得分:0)
参考Github上跟踪的此问题https://github.com/sequelize/sequelize/issues/5378
需要为关系表创建模型,如下所示:
let LabelAssociation = sequelize.define('labelAssociation', {
associationType: {
type: STRING
// etc
}
}, {
tableName: 'label_associations'
});
X.belongsToMany(Label, {
as: 'labels',
through: {
model: LabelAssociation,
attributes: ['associationId', 'associationType'],
scope: {
associationType: 'x'
}
},
foreignKey: 'associationId',
otherKey: 'labelId'
});
说明如下:
字符串参数(belongsToMany选项中的through.model)专门用于定义表的名称 自动生成模型。如果您还没有为联接定义模型 模特,你需要是的,否则Sequelize并不知道这些 存在额外的属性。