如何在Sequelize中设置关联

时间:2016-01-24 02:23:44

标签: node.js express associations sequelize.js

我有两个模型,定义在这里:

用户模型:

var Sequelize = require("sequelize");
module.exports = function (sequelize) {
    var User = sequelize.define('user', {
        name:{ type:Sequelize.STRING(50), defaultValue:''},
        email:Sequelize.STRING(50),
        password:Sequelize.STRING(256)
    },
    {
        associate: function (models) {
            User.hasMany(
                models.Article,
                { foreignKey: 'postUserId' }
            );
            User.hasMany(
                models.Article,
                { foreignKey: 'editUserId' }
            );
            User.hasMany(
                models.Article,
                { foreignKey: 'deleteUserId' }
            );
        }
    });

    return User;
};

文章模型:

module.exports = function (sequelize, DataTypes) {
    var Article = sequelize.define('Article', {
        title: {type: DataTypes.STRING, defaultValue: '' },
        content: { type: DataTypes.STRING, defaultValue: '' }
    },
    {
        associate: function (models) {
            Article.belongsTo(
                models.User,
                { foreignKey: 'postUserId' }
            );
            Article.belongsTo(
                models.User,
                { foreignKey: 'editUserId' }
            );
            Article.belongsTo(
                models.User,
                { foreignKey: 'deleteUserId' }
            );
        }
    });

    return Article;
};

在我的表中,每条记录都有三个用户标识引用模型用户。我想获得每条记录中的所有三个用户数据。 如何定义关联以及如何编写查找函数。

db.Article.findById('9100', {include: [User]}).then(function (art) {
    if (!art) {
        return res.status(404).send({
            message: 'No article with that identifier has been found'
        });
    }
    res.json(art);
}).catch(function (err) {
    return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
    });
});

以上方法只能返回一个用户数据,如何返回所有用户数据?

THX。

1 个答案:

答案 0 :(得分:1)

如果您多次关联相同的模型,则必须在关联中使用“as”属性。

associate: function (models) {
            User.hasMany(
                as:'PostArticles',
                models.Article,
                { foreignKey: 'postUserId' }
            );
            User.hasMany(
                models.Article,
                as:'EditArticles',
                { foreignKey: 'editUserId' }
            );
            User.hasMany(
                models.Article,
                as:'DeleteArticles',
                { foreignKey: 'deleteUserId' }
            );
        }

更多:http://docs.sequelizejs.com/en/latest/docs/associations/