是否可以在sequelize中定义关系,其中多个外键作为一个数组存储在一个字段中。基本上是一个belongsToMany,而不是关系表,所有的ids都存储在一个字段中,用逗号分隔。查询将使用WHERE IN('1,5,7')
。
发布于 2017-03-10 13:51:46
您可以做到这一点,但绝对没有外键约束-没有存储外键数组的可能性。但是,您可以创建一个列,该列将是表示关联表的ID的整数数组。然后,您只需要创建一些instanceMethods
来检索和设置数组值(请记住,ARRAY
类型只在PostgreSQL中可用)。
我不推荐这种解决方案,因为它不能确保数据一致性。让我们考虑一个示例-用户属于id为1、2和4的多个类别。如果您删除其中一个类别,则需要记住手动从user的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;
});
}
}
});
发布于 2019-02-07 07:33:14
使用**Op.in**
代码在数组中查找结果,以获取给定数组的带有where条件的序列化查询结果
var Sequelize = require('sequelize');
var Op = Sequelize.Op;
var arrayofTaskId = ['123', '456', '789'];
Tasks.findAll({
where: {
task_id: {
[Op.in]: arrayofTaskId
}
}
}).then(function(result) {
return res.json(result)
});
https://stackoverflow.com/questions/42719750
复制