【问题标题】:How to set the associations in Sequelize如何在 Sequelize 中设置关联
【发布时间】:2016-04-30 12:26:05
【问题描述】:

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

用户模型:

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

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

谢谢。

【问题讨论】:

    标签: node.js express associations sequelize.js


    【解决方案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/

    【讨论】:

    • 谢谢,我为每个项目添加了别名,但发现结果只包含一个用户数据,如何让结果包含 postUserData 和 editUserData 和 deleteUserData?
    • 您也应该在查询中使用as{include: [{model:User, as: 'postUserData'},{model:User, as: 'editUserData'},{model:User, as: 'deleteUserData'}]}
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多