У меня есть следующее включение:
context.params.sequelize = {
raw: false,
include: [{
model: organisationUsers,
required: false,
include: [{
required: false,
model: roles,
where: roleId ? { roleId } : undefined,
}],
}],
}
У меня есть следующие структуры данных:
OrganisationUsers:
const organisationUsers = sequelizeClient.define('organisation_users', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
roleId: {
type: DataTypes.INTEGER,
allowNull: true,
},
organisationId: {
type: DataTypes.INTEGER,
allowNull: true,
},
userId: {
type: DataTypes.INTEGER,
allowNull: true,
},
}, {
hooks: {
beforeCount(options) {
options.raw = true;
},
}
});
// eslint-disable-next-line no-unused-vars
organisationUsers.associate = (models) => {
// Define associations here
// See http://docs.sequelizejs.com/en/latest/docs/associations/
organisationUsers.belongsTo(models.organisations, { foreignKey: 'organisationId' });
organisationUsers.belongsTo(models.roles, { foreignKey: 'roleId' });
organisationUsers.belongsTo(models.users, { foreignKey: 'userId' });
};
Роль:
const roles = sequelizeClient.define('roles', {
name: {
type: DataTypes.STRING,
allowNull: false
}
}, {
hooks: {
beforeCount(options) {
options.raw = true;
}
},
});
// eslint-disable-next-line no-unused-vars
roles.associate = (models) => {
// Define associations here
// See http://docs.sequelizejs.com/en/latest/docs/associations/
roles.belongsToMany(models.permissions, { through: 'role_permissions' });
roles.hasMany(organisationUsers(app), { foreignKey: 'roleId' });
};
И пользователи:
const users = sequelizeClient.define('users', {
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true
}
},
password: {
type: DataTypes.STRING,
allowNull: false
},
}, {
hooks: {
beforeCount(options) {
options.raw = true;
}
}
});
// eslint-disable-next-line no-unused-vars
users.associate = (models) => {
// Define associations here
// See http://docs.sequelizejs.com/en/latest/docs/associations/
users.hasMany(organisationUsers(app), { foreignKey: 'userId' });
};
Если в таблице OrganisationUsers есть значения roleId, userId и organisationId, то все работает нормально, но если в таблице OrganisationUsers отсутствует связь, я получаю следующую ошибку:
SequelizeEagerLoadingError: roles is not associated to organisation_users!
Я не уверен, что делать с этой ошибкой, я читал о включении обязательного: ложного утверждения, которое, как вы можете видеть выше, я пытался.
Я не уверен, что проблема связана с вложенным включением? Если я удалю вложенное включение, чтобы оно выглядело так:
context.params.sequelize = {
raw: false,
include: [{
model: organisationUsers,
}],
}
чем все работает хорошо.
Если у вас есть идеи, советы, предложения и т. Д., Пожалуйста, дайте мне знать.
С уважением,
Эмир