Sequelize-更新行,其中col =动态变量

时间:2018-08-21 07:58:58

标签: sequelize.js

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
            })
        })
})

}

谢谢!

1 个答案:

答案 0 :(得分:1)

代替此行

schedule.set(day, hoursString).save().then()

使用下面的一个,这将解决您的问题,

let updateData = {};
updateData[day] = hoursString;
schedule.update(updateData).then()