我对后遗症有意见。我需要使用连接,但我不能处理关系。这是我的模型(用户被缩小了,它真的很大,我需要的唯一字段是NR_UTILIZADOR):
var UtilizadoresModel = sequelize.define('UTILIZADORES', {
NR_UTILIZADOR: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
}
}, {
freezeTableName: true,
paranoid: true,
timestamps: true,
hooks: {
beforeCreate: (user, options) => {
return bcrypt.hash(user.PASSWORD, 10)
.then(hash => {
user.PASSWORD = hash
})
.catch(err => {
throw new Error()
})
},
},
})
var Validacoes = sequelize.define('VALIDACOES', {
NR_VALIDACAO: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
NR_VALIDADO: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: Utilizadores,
key: 'NR_UTILIZADOR'
}
},
NR_VALIDADOR: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: Utilizadores,
key: 'NR_UTILIZADOR'
}
},
DATA_HORA_VALIDACAO: {
type: Sequelize.DATE,
allowNull: false
},
ESTADO: {
type: Sequelize.ENUM('APROVADO', 'DESAPROVADO'),
allowNull: false
}
}, {
freezeTableName: true,
timestamps: false,
})
我要做的是:
User.hasMany(Validacoes, {
foreignKey: 'NR_UTILIZADOR'
})
Validacoes.belongsTo(User)
我需要将Validacoes中的NR_VALIDADO和NR_VALIDADOR关联到utilizadores中的NR_UTILIZADOR。
当我尝试执行包含include的findAll时,我会得到以下信息:
await User.findAll({
attributes: [
'NR_UTILIZADOR',
'NOME_UTILIZADOR',
'FREGUESIA',
'createdAt',
'NR_VALIDADOR',
],
where: {
VALIDADO: false,
deletedAt: {
[Op.ne]: null
},
ESTADO: 'DESAPROVADO'
},
order: [
['createdAt', 'ASC'],
],
include: [{
model: Validacoes
}],
paranoid: false
})
original: error: column VALIDACOES.NR_UTILIZADOR does not exist
谢谢大家抽出时间
根据您的模型定义,
User.hasMany(Validacoes, {
foreignKey: 'NR_UTILIZADOR'
})
此关联定义表示
// you should add an alias to each association
// to distinguish two links to User from each other
// as well as two Validacoes links.
Validacoes.belongsTo(User, { foreignKey: 'NR_VALIDADO', as: 'Validado' })
Validacoes.belongsTo(User, { foreignKey: 'NR_VALIDADOR', as: 'Validador' })
User.hasMany(Validacoes, { foreignKey: 'NR_VALIDADO', as: 'ValidadoValidacoes' })
User.hasMany(Validacoes, { foreignKey: 'NR_VALIDADOR', as: 'ValidadorValidacoes' })
最后,您的Sequelize查询将如下所示:
await User.findAll({
attributes: [
'NR_UTILIZADOR',
'NOME_UTILIZADOR',
'FREGUESIA',
'createdAt',
'NR_VALIDADOR', // this column does not exist in User model
],
where: {
VALIDADO: false,
deletedAt: {
[Op.ne]: null
},
ESTADO: 'DESAPROVADO'
},
order: [
['createdAt', 'ASC'],
],
include: [{
model: Validacoes,
as: 'ValidadoValidacoes'
}, {
model: Validacoes,
as: 'ValidadorValidacoes'
}],
paranoid: false
})