2016-01-24 58 views
1

我有两个模型,定义是在这里:如何设置协会Sequelize

用户模式:

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

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

thx。

回答

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/

+0

感谢,我说每个项目的别名,但发现结果只包括一个用户数据,如何让结果包括postUserData和editUserData和deleteUserData? – taobataoma

+0

你能分享你的查询码吗? – Adam

+0

您应该在查询中使用'as':'{model:User,as:'postUserData'},{model:User,'editUserData'},{model:User,as:' deleteUserData'}]}' – Adam