Sequelize QueryChainer语法

时间:2012-12-22 08:46:29

标签: node.js chain sequelize.js

Sequelize QueryChainer遇到一些困难。通常情况下我不需要这样做,但我很早就决定处理自己的关联,而不是使用关联管理中构建的模块(这已经证明是非常严厉的)。

我正在编写我的REST例程,并且我正在尝试根据已经获取或需要获取的其他记录删除一些记录。我没有使用4-5个嵌套回调,而是决定使用QueryChainer和串行运行。

在这个例子中,我正在接受用户,如果找到了一个用户,我想将一行查询拼接在一起以处理删除特定关联的问题。我遇到的问题主要是只使用模型EventEmitting方法来理解chainer的语法。

        // Find user, destroy it and associations
    db.Models.user.find({ where: {STUID: id} })
        .success(function (user) {
            if (!user) {
                res.locals.err = {
                    status: 'FAILED',
                    message: 'Could not delete user',
                    reason: 'No user resource found'
                }
            } else {
                chain = new db._sqlize.Utils.QueryChainer();
                chain.add(user.destroy())

                // Check and destroy author association
                if (user.AUTHOR) {
                    // Would like to fetch the specific author model
                    // db.models.author.find({})
                    // ... and destroy it too,
                    // author.destroy()
                    // without having to nest
                }


            }
        });

sequelize querychain语法指定执行以下操作:

.add(Model, 'function', [param1, param2])

但我不确定这到底是什么意思。我可以在这里定义内联函数吗?函数只是一个字符串,寻找已经在其他地方定义过的函数,或者它是我正在添加的模型的函数吗?文档感觉有点匆忙。

1 个答案:

答案 0 :(得分:1)

queryChain需要的语法是:

.add(sequelize, 'sync', [ {force: true} ])
.add(Partner, 'create', [ {name: 'foo'} ])

我犯了同样的错误,你可以在这里看到:https://github.com/sdepold/sequelize/issues/385#issuecomment-11690183