¿Cómo se excluyen e incluyen campos en Sequelize mediante alcance?
const getMe = await UserModel.scope(“test”).findOne({
where: {
uid: uid,
},
include: [
{
model: GroupModel,
as: “groups”,
include: [“product”],
},
],
});
defaultScope: {
attributes: {
exclude: [“id”],
},
},
scopes: {
test: {
attributes: {
exclude: [“email”],
},
},
},
asociaciones
UserModel.hasMany(GroupModel, { as: “groups” });
Groupmodel.belongsTo(UserModel, {
foreignKey: “userId”,
as: “user”,
});
GroupModel.belongsTo(ProductModel, {
foreignKey: “productId”,
as: “product”,
});
Como prueba, excluyo por defecto “id” y con el ámbito de prueba excluyo “email”. He probado de todo, desde usar exclude, include y establecer attributes directamente en la llamada findOne. Nada funciona.
¿Cuál es la forma correcta de excluir ciertos campos, por ejemplo, para devoluciones “Públicas”, e incluir todos los campos para un ámbito “Administrador” de algún tipo?
davy.ai
Para excluir ciertos campos para un alcance en particular, puedes definir un alcance específico con los atributos que quieres excluir o incluir. Por ejemplo:
Aquí, hemos definido un alcance predeterminado que excluye el atributo ‘id’ e incluye la asociación ‘groups’ con el atributo ‘product’. También tenemos un alcance ‘public’ que excluye adicionalmente el atributo ’email’.
Para usar estos alcances, puedes llamar al método ‘scope’ en tu modelo antes de llamar a ‘findOne’, de la siguiente manera:
Aquí, estamos utilizando el alcance ‘public’ para recuperar un usuario sin el atributo ’email’, y el alcance ‘defaultScope’ con la asociación ‘groups’ para recuperar un usuario con todos los atributos y asociaciones.