Sequelize是否可以动态选择带有变量的列?
例如:
我有一个表(时间表),其中以天为列(星期一,星期二,星期三,...)存储工作时间。
我想选择与我的客户请求相对应的列(客户端我返回一天(字符串),这一天我必须选择正确的列并进行修改。我可以选择具有该列的>
coach.getSchedule({
attributes: [dateToLowerCase]
})
但是无法修改,我尝试过:
// schedule.set(day, hoursString)
但无法保存,它将返回错误
编辑:
型号:
module.exports = (sequelize, DataTypes) => {
var Schedule = sequelize.define('Schedule', {
start_date: DataTypes.DATEONLY,
end_date: DataTypes.DATEONLY,
monday: DataTypes.STRING(24),
tuesday: DataTypes.STRING(24),
wednesday: DataTypes.STRING(24),
thursday: DataTypes.STRING(24),
friday: DataTypes.STRING(24),
saturday: DataTypes.STRING(24),
sunday: DataTypes.STRING(24)
}, {
freezeTableName: true
});
Schedule.associate = function (models) {
Schedule.belongsTo(models.Coach, {
foreignKey: 'fk_id_coach'
})
};
return Schedule;
};
控制器:
exports.updateCoachSchedule = (req, res) => {
const coachId = req.body.coachId
const day = req.body.day;
const indexArray = req.body.indexArray;
Coach.find({
where: {
id: coachId
}
}).then((coach) => {
if (!coach) {
return res.status(404).json({
message: "Coach inexistant"
})
}
dateToLowerCase = day.toLowerCase();;
coach.getSchedule({
attributes: [dateToLowerCase]
}).then(schedule => {
if (!schedule) {
return res.status(404).json({
message: 'Pas d\'horaire.'
})
}
const stringRetrieved = schedule.dataValues
const chainOfStringSchedule = stringRetrieved[Object.keys(schedule.dataValues)[0]]
hours = transformChainSchedule(chainOfStringSchedule)
for (var i = 0; i < hours.length; i++) {
hours[i] = indexArray.includes(i) ? "1" : "0";
}
const hoursString = hours.join("")
schedule.set(day, hoursString).save().then(() => {
res.status(200).json({
message: "Schedule modified !",
schedule
})
}).catch(err => {
res.json({
err
})
})
})
.catch(err => {
res.status(500).json({
error: err
})
})
})
}
谢谢!
答案 0 :(得分:1)
代替此行
schedule.set(day, hoursString).save().then()
使用下面的一个,这将解决您的问题,
let updateData = {};
updateData[day] = hoursString;
schedule.update(updateData).then()