J'ai deux modèles, Employé s et Bureau s. Chaque employé appartient à un bureau et un bureau compte plusieurs employés.Sequelize set valeur associée
Je n'arrive pas à trouver comment mettre à jour le bureau d'un employé en utilisant Sequelize.
Le employé modèle est la suivante:
let Employee = sequelize.define("Employee", {
id: {
field: 'id',
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: false
},
name: {
field: 'name',
type: DataTypes.STRING(255),
allowNull: false
}
}, {
freezeTableName: true,
timestamps: false,
deletedAt: false
})
Employee.associate = models => {
Employee.belongsTo(models.Office, {
foreignKey: 'id'
})
}
Le modèle Office est la suivante:
let Office = sequelize.define("Office", {
id: {
field: 'id',
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
field: 'name',
type: DataTypes.STRING(255),
allowNull: false
}
}, {
freezeTableName: true,
tableName: 'Lkup_Office',
timestamps: false,
deletedAt: false
})
Office.associate = models => {
Office.hasMany(models.Employee, {
foreignKey: 'id'
})
}
Dans la base de données que j'ai l'employé qui suit:
{
"id": "2",
"name" : "John",
"office": {
"id": 2,
"name" : "Seattle"
}
}
.. . et les bureaux suivants:
[
{
"id": 1,
"name" : "Chicago"
},
{
"id": 2,
"name" : "Seattle"
}
]
Je souhaite modifier l'ID du bureau de l'employé (1) de 2
('Seattle'
) à 1
('Chicago'
); le problème est que la requête suivante
// PUT /2/office/1
router.put('/:employeeId/office/:officeId', (req, res) => {
models.Employee.findOne({
where:{id:req.params.employeeId},
include:[{model:models.Office}]
}).then(employee => {
models.Office.findOne({
where:{id:req.params.officeId},
include:[{model:models.Employee}]
}).then(office => {
employee.setOffice(office).then(result => {
res.send(result)
})
})
})
})
... bureau de mon employé n'est pas mis à jour:
{
"id": "2",
"name" : "John"
"office": {
"id": 2
"name" : "Seattle"
}
}
Il n'a pas, en fait, rien faire du tout: pas d'erreur, le DB n'est pas changé. Je soupçonne qu'il y a quelque chose que je ne fais pas correctement, mais Sequelize ne lance aucune erreur.