2017-07-17 2 views
0

J'ai une table Users et une table Groups, quand je récupère un seul utilisateur, je veux obtenir une liste de tous les groupes auxquels cet utilisateur appartient. J'ai créé une table de jointures nommée GroupUsers et elle a userId et groupId, c'est ainsi que je sais qu'un utilisateur appartient à un groupe. Maintenant, quand j'essaie d'obtenir la liste des groupes auxquels un utilisateur appartient en utilisant le séquenceur include sur find, il retourne seulement la première correspondance, si l'utilisateur appartient à divers groupes. Comment puis-je résoudre ceci?sequelize include retourne un seul résultat

Users controller

return models.Users 
.find({ 
    include: [{ 
    model: models.Groups, 
    as: 'groups', 
    limit: null, 
    required: false 
    }], 
    where: { username } 
}) 

Returns this:

{ 
    "id": 1, 
    "username": "John", 
    "phone": "xxxxxxxx", 
    "email": "[email protected]", 
    "createdAt": "2017-07-16T20:14:04.744Z", 
    "updatedAt": "2017-07-16T20:14:04.744Z", 
    "groups": [ 
     { 
      "id": 1, 
      "name": "Test Group", 
      "type": "Public", 
      "createdAt": "2017-07-16T20:13:18.392Z", 
      "updatedAt": "2017-07-16T20:13:18.392Z", 
      "GroupUsers": { 
       "userId": 1, 
       "groupId": 1, 
       "last_seen": null, 
       "createdAt": "2017-07-16T20:14:27.903Z", 
       "updatedAt": "2017-07-16T20:14:27.903Z" 
      } 
     } 
    ] 
} 

Instead of this:

{ 
     "id": 1, 
     "username": "John", 
     "phone": "xxxxxxxx", 
     "email": "[email protected]", 
     "createdAt": "2017-07-16T20:14:04.744Z", 
     "updatedAt": "2017-07-16T20:14:04.744Z", 
     "groups": [ 
      { 
       "id": 1, 
       "name": "Test Group", 
       "type": "Public", 
       "createdAt": "2017-07-16T20:13:18.392Z", 
       "updatedAt": "2017-07-16T20:13:18.392Z", 
       "GroupUsers": { 
        "userId": 1, 
        "groupId": 1, 
        "last_seen": null, 
        "createdAt": "2017-07-16T20:14:27.903Z", 
        "updatedAt": "2017-07-16T20:14:27.903Z" 
       } 
      }, 
      { 
       "id": 2, 
       "name": "Test Group 2", 
       "type": "Public", 
       "createdAt": "2017-07-16T20:13:18.392Z", 
       "updatedAt": "2017-07-16T20:13:18.392Z", 
       "GroupUsers": { 
        "userId": 1, 
        "groupId": 2, 
        "last_seen": null, 
        "createdAt": "2017-07-16T20:14:27.903Z", 
        "updatedAt": "2017-07-16T20:14:27.903Z" 
       } 
      } 
     ] 
    } 

Je suis sûr que je fais quelque chose de mal quelque part, je ne sais pas où, cette même chose peut également être la cause de sequelize, y compris la table des jointures dans le r esult: GroupUsers

Répondre

0

Il semble que dans mes associations, je l'ai fait:

Users.belongsToMany(models.Groups, { 
    through: 'GroupUsers', 
    as: 'groups', 
    foreignKey: 'groupId' 
}); 

Au lieu de:

Users.belongsToMany(models.Groups, { 
    through: 'GroupUsers', 
    as: 'groups', 
    foreignKey: 'userId' 
}); 

Notez le foreignKey attribut

Et comme pour l'objet GroupUsers qui est aussi retourné, j'ai enlevé cela en faisant:

include: [{ 
    model: models.Groups, 
    as: 'groups', 
    attributes: ['id', 'name'], 
    through: { attributes: [] } 
    }] 

Notez la clé through qui a attributes définie sur un tableau vide.