是否可以在 sequelize 中定义关系,其中多个外键作为数组存储在一个字段中。基本上是belongsToMany,但不是关系表,所有ID都存储在一个字段中,以逗号分隔。查询将使用 WHERE IN('1,5,7')
。
最佳答案
你可以做到,但绝对没有外键约束——不可能存储外键数组。但是,您可以创建一个列,该列将是表示关联表 ID 的整数数组。然后你只需要创建一些 instanceMethods
来检索和设置数组值(记住 ARRAY
类型只在 PostgreSQL 中可用)。
我不推荐此解决方案,因为它不能确保数据一致性。让我们考虑一个例子 - 用户属于许多类别,id 为 1、2 和 4。如果删除其中一个类别,您需要记住从用户的 categories
数组中手动删除此 id(使用一些 hook
或其他工具) ,否则该用户仍将被分配到不再存在的类别。
const User = sequelize.define('User', {
categories: DataTypes.ARRAY(DataTypes.INTEGER)
}, {
instanceMethods: {
getCategories: function(){
return Category.findAll({
where: {
id: { $in: this.get('categories') }
}
}).then(categories => {
// if user's categories was [1, 2, 4]
// it would return categories with id=1, id=2 and id=4
return categories;
});
},
setCategories: function(ids){
return this.setDataValues('categories', ids).save().then(self => {
return self;
});
}
}
});
关于sequelize.js - 与 WHERE IN ("ARRAY"的 Sequelize 关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42719750/