我用Sequelize定义了以下模型:
module.exports = function (sequelize, DataTypes) {
var Genre = sequelize.define('Genre', {
name: {
type: DataTypes.STRING,
allowNull: false
}
}, {
classMethods: {
associate: function (models) {
Genre.hasMany(models.Genre, {as: 'subGenre'});
Genre.belongsTo(models.Genre, {as: 'parentGenre'});
}
}
});
return Genre;
}
想法是会有父类型,并且每个子类型都可以有几个子类型。运行时sync()
,表创建良好,但是还有一个GenreId
我无法解释的额外的列():
"id";"integer";
"name";"character varying";255
"createdAt";"timestamp with time zone";
"updatedAt";"timestamp with time zone";
"GenreId";"integer";
"parentGenreId";"integer";
解释模型的明智方法是只添加一parentGenreId
列,但是我不确定如何定义仅添加一列的双向关系(类型可能有父级,类型可能有很多子级)。
如何修改模型以正确定义关系?
我认为您可以使用through
(未经测试)
module.exports = function (sequelize, DataTypes) {
var Genre = sequelize.define('Genre', {
name: {
type: DataTypes.STRING,
allowNull: false
}
}, {
classMethods: {
associate: function (models) {
Genre.hasMany(models.Genre, {as: 'children', foreignKey: 'ParentId'});
Genre.belongsTo(models.Genre, {as: 'parent', foreignKey: 'ParentId'});
}
}
});
return Genre;
}
所以你可以有Genre#getChilren
和Genre#getParent
编辑:由于@ mick-hansen,through
适用于belongsToMany
,对于这种情况没有用。我的错。使用他的建议已更正
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句