sequelize include只返回一个结果

时间:2017-07-17 10:11:57

标签: join sequelize.js postgresql-9.4

我有一个public static void showKeyboard(EditText editText) { if (editText != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); } } 表和一个Users表,当我检索单个用户时,我想获得用户所属的所有组的列表。我创建了一个名为Groups的联接表,它上面有GroupUsersuserId,这就是我知道用户属于某个组的方式。现在,当我尝试使用groupId上的sequelize include来获取用户所属的组列表时,如果用户属于不同的组,则只返回第一个匹配项。我该如何解决这个问题?

find

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": "john@email.com", "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": "john@email.com", "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" } } ] }

1 个答案:

答案 0 :(得分:0)

在我的协会看来,我做了:

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

而不是:

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

请注意foreignKey属性

至于同样返回的GroupUsers对象,我通过执行以下操作删除了它:

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

请注意将through设置为空数组的attributes键。