您如何按范围排除和包含 Sequelize 中的字段?
How do you exclude and include fields in Sequelize by scope?
const getMe = await UserModel.scope("test").findOne({
where: {
uid: uid,
},
include: [
{
model: GroupModel,
as: "groups",
include: ["product"],
},
],
});
我正在尝试根据范围管理排除字段和允许字段。
defaultScope: {
attributes: {
exclude: ["id"],
},
},
scopes: {
test: {
atrributes: {
exclude: ["email"],
},
},
},
协会
UserModel.hasMany(GroupModel, { as: "groups" });
Groupmodel.belongsTo(UserModel, {
foreignKey: "userId",
as: "user",
});
GroupModel.belongsTo(ProductModel, {
foreignKey: "productId",
as: "product",
});
作为测试,我默认排除“id”,并且在测试范围内我排除“email”。我已经尝试了从 exclude
include
直接在 findOne
调用中设置 attributes
的所有方法。没有任何效果。
排除“Public”returns 的某些字段并包括某种“管理范围”的所有字段的正确方法是什么?
如果你有defaultScope
这样的。
defaultScope: {
attributes: {
exclude: ['email']
}
}
当您查找查询时,它默认排除“电子邮件”并使用 unscoped
禁用 defaultScope
。
// This should not return email
UserModel.findOne()
// Admin case: unscoped to disable defaultScope. This should return email.
UserModel.unscoped().findOne()
或者,如果您想要更明确,您可以将作用域命名为“admin”。
{
defaultScope: {
attributes: {
exclude: ['email']
}
},
scopes: {
admin: {} // No special options for admin scope. No exclusion.
}
}
通过这种方式查找查询时,默认情况下会排除“电子邮件”。然后,如果您使用“admin”范围,它不会排除任何内容。
// This should not return email
UserModel.findOne()
// Admin case: This should overwrite the defaultScope.
UserModel.scope('admin').findOne()
.scope(str)
函数会覆盖 defaultScope
,因此当您使用 .scope(str)
.
时,defaultScope
中的任何选项都会被忽略
const getMe = await UserModel.scope("test").findOne({
where: {
uid: uid,
},
include: [
{
model: GroupModel,
as: "groups",
include: ["product"],
},
],
});
我正在尝试根据范围管理排除字段和允许字段。
defaultScope: {
attributes: {
exclude: ["id"],
},
},
scopes: {
test: {
atrributes: {
exclude: ["email"],
},
},
},
协会
UserModel.hasMany(GroupModel, { as: "groups" });
Groupmodel.belongsTo(UserModel, {
foreignKey: "userId",
as: "user",
});
GroupModel.belongsTo(ProductModel, {
foreignKey: "productId",
as: "product",
});
作为测试,我默认排除“id”,并且在测试范围内我排除“email”。我已经尝试了从 exclude
include
直接在 findOne
调用中设置 attributes
的所有方法。没有任何效果。
排除“Public”returns 的某些字段并包括某种“管理范围”的所有字段的正确方法是什么?
如果你有defaultScope
这样的。
defaultScope: {
attributes: {
exclude: ['email']
}
}
当您查找查询时,它默认排除“电子邮件”并使用 unscoped
禁用 defaultScope
。
// This should not return email
UserModel.findOne()
// Admin case: unscoped to disable defaultScope. This should return email.
UserModel.unscoped().findOne()
或者,如果您想要更明确,您可以将作用域命名为“admin”。
{
defaultScope: {
attributes: {
exclude: ['email']
}
},
scopes: {
admin: {} // No special options for admin scope. No exclusion.
}
}
通过这种方式查找查询时,默认情况下会排除“电子邮件”。然后,如果您使用“admin”范围,它不会排除任何内容。
// This should not return email
UserModel.findOne()
// Admin case: This should overwrite the defaultScope.
UserModel.scope('admin').findOne()
.scope(str)
函数会覆盖 defaultScope
,因此当您使用 .scope(str)
.
defaultScope
中的任何选项都会被忽略