【问题标题】:How to insert an item into a sequence using Sequelize, or How to manage an ordering attribute如何使用 Sequelize 将项目插入到序列中,或如何管理排序属性
【发布时间】:2015-10-28 22:39:07
【问题描述】:

我有一个具有序列属性的实体,它是列表中 N 个成员的 1-N 整数。它们是折线点。 我希望能够在给定的序列点插入到列表中,并在该点或序列中增加所有项目,以便为新项目腾出空间,同样,如果我删除然后减少上面的所有内容,所以我们仍然有不错的序列排序,没有丢失的数字。 这当然有一个 REST 接口,但我不想破解它,我只想让 sequelize 神奇地管理这个序列号。 我假设我需要在 sequelize 中获取一些“插入前”和“删除后”挂钩并发出一些 SQL 来实现这一点。这个假设是正确的还是有一些更酷的方法。

【问题讨论】:

  • INSERT INTO ... SELECT IDENTITY(1,1),..怎么样
  • 好吧,IDENTITY 看起来确实像我想要的功能,可惜它只是 SQL 服务器。但我仍然坚持认为有一个东西在,或者可以添加到,续集来做到这一点,谢谢。
  • 嗯,我想,插入的时候可以选择lasted id为last_id,然后插入last_id + 1see here
  • 在查看 sql server 上的 IDENTITY 时,它实际上并没有正确管理列,它也没有正确管理插入或删除,所以这不是我想要的。最后加一个没有问题,但是这是一个地图应用,你需要能够编辑路径,这意味着在中间添加一个新点。我将把它作为属性功能添加到续集,我只是想检查一下我没有做一些公开的事情。

标签: sql node.js sequelize.js


【解决方案1】:

我没有对此进行测试,但这似乎是解决方案,几乎不值得评论。

我知道modelName,并且name==属性名,

    options.hooks={
            beforeInsert: function(record, options) {
                return self.models[modelName].incrementAfter(name,record[name]);
            },
            afterDelete: function(record, options) {
                return self.models[modelName].decrementAfter(name,record[name]);
            }
        }

然后添加到我的扩展模型原型中

incrementAfter:function(field,position){
    return this.sequelize.query("UPDATE "+this.tableName+" SET "+field+" = "+field+"+1 WHERE "+field +" >= "+position);
},

decrementAfter:function(field,position){
    return this.sequelize.query("UPDATE "+this.tableName+" SET "+field+" = "+field+"-1 WHERE "+field +" >= "+position);
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2012-07-02
    • 2012-08-23
    • 2011-12-22
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多