Sequelize.js Sequelize-更新列,其中col=动态变量
使用Sequelize是否可以动态选择带有变量的列 例如: 我有一个以天为列(星期一、星期二、星期三,…)的表格(日程表),在那里我存储工作时间 我想选择与我的客户端请求相对应的列(客户端我返回一天(字符串),在这一天,我必须选择正确的列并修改它。我可以使用Sequelize.js Sequelize-更新列,其中col=动态变量,sequelize.js,Sequelize.js,使用Sequelize是否可以动态选择带有变量的列 例如: 我有一个以天为列(星期一、星期二、星期三,…)的表格(日程表),在那里我存储工作时间 我想选择与我的客户端请求相对应的列(客户端我返回一天(字符串),在这一天,我必须选择正确的列并修改它。我可以使用 coach.getSchedule({ attributes: [dateToLowerCase] }) 但无法修改,我尝试了以下方法: // schedule.se
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
})
})
})
exports.updateCachSchedule=(请求、回复)=>{
const coachId=req.body.coachId
const day=所需的body.day;
const indexArray=req.body.indexArray;
Coach.find({
其中:{
id:coachId
}
}).然后((coach)=>{
如果(!coach){
返回res.status(404.json)({
信息:“教练不远”
})
}
dateToLowerCase=day.toLowerCase();;
coach.getSchedule({
属性:[dateToLowerCase]
})。然后(时间表=>{
如果(!时间表){
返回res.status(404.json)({
信息:“帕斯·德·霍莱尔。”
})
}
const stringRetrieved=schedule.dataValues
const chainOfStringSchedule=stringRetrieved[Object.keys(schedule.dataValues)[0]]
小时=转换链计划(转换链计划)
对于(变量i=0;i{
res.status(200).json({
消息:“计划已修改!”,
日程
})
}).catch(错误=>{
res.json({
犯错误
})
})
})
.catch(错误=>{
res.status(500).json({
错误:错误
})
})
})
}
谢谢!请不要用这句话
schedule.set(day, hoursString).save().then()
使用下面的一个,这将解决您的问题
let updateData = {};
updateData[day] = hoursString;
schedule.update(updateData).then()
您在schedule.set(day,hoursString)中传递的值是什么?@Vivek Doshi,值day=my request(示例:星期一),hoursString=字符串链“hoursString”:“00111100001000000000000”。它是24个字符,表示一天中的小时数(0=关闭时间,1=打开时间)是否有错误?如果没有,请发布该行生成的原始查询。如果在schedule.set(day,hoursString)之后使用console.log(schedule),则会修改schedule,但当我必须将其保存在db中时会发生错误。postman的响应是:error{}
Executing(默认值):选择
monday`FROMSchedule
ASSchedule
WHEREfk_id_coach
=1个限制1;POST/api/admin/coach/Schedule/update 500 25.507 ms-12`非常感谢,这解决了我的问题。当我得到日程表时,只需在属性上添加'id'。