2016-10-02 83 views
0

我在节点使用Sequelize,并有一个表名UserAuthSequelize:创建一对多关系

User 
    id 
    name 

Auth: 
    id 
    token 

我想关系添加到这个模型。

A User可以有许多Auth's,to-manyAuth的关系。

一个Auth只能有一个User,to-oneUser的关系。

我在我的模型文件一个类的实例,我创建使用下面的代码的关系:

tableName: 'User', 
      classMethods: { 
       associate: function (models) { 
        user.belongsToMany(user, { through: { model: models.auth }, as: `user` }) 
       } 

这段代码在Auth产生一个电场,称为userId

我所希望得到的是以下几点:

User 
    id 
    name 
    auths //an array that will contain all instances of Auth by this User 

Auth: 
    id 
    token 
    user //an object of User to whom this Auth object belongs to 

我在做什么错?

回答

1

试试这个:

var User = sequelize.define('User', { 
    ... 
    classMethods: { 
     associate: function (models) { 
      User.hasMany(models.Auth, {as: 'auths'}); 
     } 
    } 
}; 


var Auth = sequelize.define('Auth', { 
    ... 
    classMethods: { 
     associate: function (models) { 
      Auth.belongsTo(models.User, {as: 'user'}); 
     } 
    } 
}; 

这将添加一个userId列到auth表。

要查询它,你会做(注意:在查询的include),您也可以做到这一点,反之亦然:

User.findOne({ 
    include: [Auth] 
}) 

你可能要检查的sequelize文档的one-to-manyhasOne关系和hasManyhasOne API以获取更多信息。

+0

谢谢。我如何取回所有与'User'关联的'Auth'记录的数组? “用户”表不应该有一个名为“Auths”的字段? – user1107173

+1

你只需要在一张表中引用,而不是在查询中,你会告诉它包括第二个模型。我也为我的帖子添加了一个查询示例。 – user3254198