当我使用 belongsToMany 关联时在 Sequelize 中自动预加载
Automatic Eager Loading in Sequelize when I am using belongsToMany assocation
好的,考虑一下。我的数据库中有 2 个实体 - Groups 和 Users。所以它们之间存在关系-
- 一个用户可以是多个组的成员,一个组可以有多个成员(多对多)
- 一个管理员(用户)可以是多个组的管理员,一个组可以有多个管理员(多对多)
代码如下-
// Groups and Users (Admins) MANY-TO-MANY
User.belongsToMany(Groups, {through: "admins", as: "AdminGroups"});
Groups.belongsToMany(User, {through: 'admins', as: "Admins"});
// Groups and Users (Members) MANY-TO-MANY
User.belongsToMany(Groups, {through: 'members', as: "MemberGroups"});
Groups.belongsToMany(User, {through: 'members', as: "Members"});
现在我正在尝试使用 -
获取一个特定组的管理员
const admins = await group.getAdmins({
attributes: ['id', 'firstname', 'lastname'],
});
哪个有效并给我以下输出-
[
{
"id": 1,
"firstname": "Jon",
"lastname": "Doe",
"admins": {
"createdAt": "2021-01-21T18:53:45.791Z",
"updatedAt": "2021-01-21T18:53:45.791Z",
"userId": 1,
"groupId": 11
}
}
]
但它也在急切地加载用户的管理信息。
这只是额外的开销,我显然不需要这些信息。不在这里。
有什么想法可以分离这种急切加载吗?
您可以使用 joinTableAttributes
排除预加载数据。将空数组设置为不从关联的 table.
中获取任何内容
const admins = await group.getAdmins({
attributes: ['id', 'firstname', 'lastname'],
joinTableAttributes: []
});
好的,考虑一下。我的数据库中有 2 个实体 - Groups 和 Users。所以它们之间存在关系-
- 一个用户可以是多个组的成员,一个组可以有多个成员(多对多)
- 一个管理员(用户)可以是多个组的管理员,一个组可以有多个管理员(多对多)
代码如下-
// Groups and Users (Admins) MANY-TO-MANY
User.belongsToMany(Groups, {through: "admins", as: "AdminGroups"});
Groups.belongsToMany(User, {through: 'admins', as: "Admins"});
// Groups and Users (Members) MANY-TO-MANY
User.belongsToMany(Groups, {through: 'members', as: "MemberGroups"});
Groups.belongsToMany(User, {through: 'members', as: "Members"});
现在我正在尝试使用 -
获取一个特定组的管理员const admins = await group.getAdmins({
attributes: ['id', 'firstname', 'lastname'],
});
哪个有效并给我以下输出-
[
{
"id": 1,
"firstname": "Jon",
"lastname": "Doe",
"admins": {
"createdAt": "2021-01-21T18:53:45.791Z",
"updatedAt": "2021-01-21T18:53:45.791Z",
"userId": 1,
"groupId": 11
}
}
]
但它也在急切地加载用户的管理信息。 这只是额外的开销,我显然不需要这些信息。不在这里。 有什么想法可以分离这种急切加载吗?
您可以使用 joinTableAttributes
排除预加载数据。将空数组设置为不从关联的 table.
const admins = await group.getAdmins({
attributes: ['id', 'firstname', 'lastname'],
joinTableAttributes: []
});