为什么MYSQL列值得到修改/删除的问题?

wi3ka0sx  于 2023-02-11  发布在  Mysql
关注(0)|答案(1)|浏览(132)

我正在构建一个React Native应用程序,将MYSQL作为数据库,并在Node.js上使用Sequelize ORM。问题是,我有一个名为Like的表,还有一个名为userId的列字段,我只是在其中存储用户ID。但userId字段会随机清除。就像我重新启动数据库时一样,或者出现错误,需要重新启动数据库,或者正在重新启动Android Emulator
下面是它的外观:

CreateLikeModel.init({
id:{
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},

userId:{
    type: DataTypes.STRING,
    allowNull: true
},
food_Name:{
    type: DataTypes.STRING,
    allowNull: false
},
food_id:{
    type: DataTypes.INTEGER,
    allowNull: false
}

},
这是用户执行类似功能时保存user Id的函数的一部分:

const user = await CreateCustomer.findOne({where: {id: req.user.id}});
  const likeObj ={
        user_Id:  user?.dataValues?.id?.toString(),
        food_Name: food?.dataValues?.food_Name,
        food_id: food.dataValues.id as number
       }
    //check if this user has liked this food
    const checkUser = checkLike.find((single)=> single?.dataValues.userId == 
    user.dataValues.id);
 
   if(checkUser){
      const getLike = await CreateLikeModel.findOne({where: {food_Name: 
      food.dataValues.food_Name, userId: user?.dataValues.id}});
        await getLike?.destroy();//delete the like from the record if the user already liked;
      
      return res.status(200).json('unliked');

    }
    
    await CreateLikeModel.create({...likeObj});
      return res.status(200).json('liked');

我连接到数据库是这样的:

sequelizeDB.sync({alter: true}).then(()=>{

console.log('connected to datatbase')
 })

我试着将userId保存为字符串,因为它之前是一个数字,最初使用number时,它通常会将userId的值重置为0,但仍然没有解决问题。
以前我使用user_name而不是userId时没有发生过这种情况。什么原因导致了这个问题?目前,我通常在删除值时手动将其输入回数据库。

xqnpmsa8

xqnpmsa81#

likeObj(用作like对象的创建属性)内部,用户ID字段为snake case user_Id,在您的模型中,我看到它位于camelCase userId中。
我怀疑这就是它不能正确填充数据的根本原因,但是请记住,正如Sequelize文档中所述,.sync({ alter: true })可能是一个破坏性操作。

相关问题