sequelize通过关联查询 - 嵌套包含?

时间:2016-04-28 01:15:46

标签: javascript sails.js sequelize.js

这是我的帐户模型:

    module.exports = {
    attributes: {
        accountPkey: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            field: 'account_pkey'
        },
        accountName: {
            type: Sequelize.STRING,
            allowNull: false,
            field: 'account_name'
        },
        imagePkey: {
            type: Sequelize.INTEGER,
            field: 'image_pkey'
        }
    },
    associations: function() {
        Account.hasMany(Privilege, {
            as: 'Privileges',
            foreignKey: 'account_pkey'
        });

        Account.hasMany(AccountContact, {
            as: 'Contacts',
            foreignKey: 'account_pkey'
        });
    },
    options: {
        tableName: 'v_account',
        timestamps: false,
        classMethods: {
            whereUserIs(user_pkey, privileges) {
                return Account.findAll({
                    include: [{
                        model: Privilege,
                        where: {
                            'Privilege.privilege_type_name': {
                                $in: privileges
                            },
                            'Privilege.user_pkey': {
                                $eq: user_pkey
                            }
                        }
                    }]
                });
            }
        },
        instanceMethods: {},
        hooks: {}
    }
};

在我的whereUserIs类方法中,我试图返回所有存在特权的帐户,该特权具有user_pkey并且具有传入的任何特权。

请假设Privilege模型具有account_type_name和user_pkey属性。我的语法是否正确?

编辑:我实际上是使用这个风帆钩来加载sequelize:https://www.npmjs.com/package/sails-hook-sequelize

第二次编辑: 这是一个更复杂的查询:我想找到所有在上面查询的任何帐户上都有权限的用户:

User.findAll({
        include: [
            {
                model: Privilege,
                include: [
                    {
                        model: Account,
                        include: [{
                            model: Privelege,
                            where: {
                                'Privilege.privilege_type_name': {
                                    $in: privileges
                                },
                                'Privilege.user_pkey': {
                                    $eq: user_pkey
                                }
                            }
                        }]
                    }
                ]
            }
        ]
    })

这第二个是否有意义?

在这两个查询中,我是否会获得实体列表(即帐户或用户),还是嵌套结果(包括所有包含)?如何确保我的帐户和用户列表是唯一/不同的?

0 个答案:

没有答案