node.js - 如何在 Sequelize 中设置关联

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

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

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

上述方法只能返回一个User Data,如何返回所有User Data?

谢谢。

最佳答案

如果您多次关联相同的模型,则必须在关联中使用“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/

关于node.js - 如何在 Sequelize 中设置关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34971521/

相关文章:

javascript - Jade 不渲染外部 JSON

ruby-on-rails - 如何将属于 "has many :through"一半的项目分配给关联的另一半?

node.js - 执行 Mongo 使用 Mongo shell 在文本文件中插入命令

javascript - node.js 上的 SES 尽管返回 'success' 响应但未发送电子邮件

node.js - Sails.js - 如何永远使用而不是在服务器启动时自动启动 grunt?

java - 一对多类型关联的策略,其中 "many"辅助条目以百万计

java - 用于管理双向关联和反向更新的通用 Java 框架

node.js - 在 Node.js 的 SendGrid 中为 "from"字段添加名称

node.js - nodejs Passport 身份验证 token

node.js - 动态创建 zip 并将其流式传输到客户端