是否有可能定义一个sequelize关系在多个外键被存储在一个字段的数组。基本上是一个belongsToMany而是一个关系表的所有ID存储逗号在一个场分离。查询将与WHERE IN('1,5,7')
。
你可以这样做,但绝对不用担心外键约束 - 没有储存外键的阵列的可能性。然而,可以创建,这将是表示关联表的ID的整数数组的一列。然后你只需要创建一些instanceMethods
用于读取和设置数组值(记住,ARRAY
类型仅适用于PostgreSQL的)。
我不推荐这种解决方案由于它不保证数据的一致性。让我们看一个例子 - 如果你删除这些类别之一,你需要记住手动删除的用户categories
阵列此ID(使用一些hook
或其他工具)用户属于多个类别,有ID为1,2和4。 ,否则该用户将仍然被分配到不再存在的一个类别。
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;
});
}
}
});
为了得到与在条件给定的数组使用**Op.in**
代码,找出与数组导致sequelize查询结果
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)
});