首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >序列化与WHERE IN的关系("ARRAY")

序列化与WHERE IN的关系("ARRAY")
EN

Stack Overflow用户
提问于 2017-03-10 21:38:59
回答 2查看 29.9K关注 0票数 9

是否可以在sequelize中定义关系,其中多个外键作为一个数组存储在一个字段中。基本上是一个belongsToMany,而不是关系表,所有的ids都存储在一个字段中,用逗号分隔。查询将使用WHERE IN('1,5,7')

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-10 21:51:46

您可以做到这一点,但绝对没有外键约束-没有存储外键数组的可能性。但是,您可以创建一个列,该列将是表示关联表的ID的整数数组。然后,您只需要创建一些instanceMethods来检索和设置数组值(请记住,ARRAY类型只在PostgreSQL中可用)。

我不推荐这种解决方案,因为它不能确保数据一致性。让我们考虑一个示例-用户属于id为1、2和4的多个类别。如果您删除其中一个类别,则需要记住手动从user的categories数组中删除此id(使用某个hook或其他工具),否则此用户仍将被分配到一个不再存在的类别。

代码语言:javascript
代码运行次数:0
运行
复制
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;
            });
        }
    }
});
票数 11
EN

Stack Overflow用户

发布于 2019-02-07 15:33:14

使用**Op.in**代码在数组中查找结果,以获取给定数组的带有where条件的序列化查询结果

代码语言:javascript
代码运行次数:0
运行
复制
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)
});
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42719750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档