首页 文章

如何在Sequelize中设置关联

提问于
浏览
1

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

用户模型:

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;
};

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

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)
    });
});

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

谢谢 .

1 回答

  • 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/

相关问题