繁体   English   中英

序列化n:m关联-投票系统-无法设置联接表的属性

[英]Sequelize n:m association - Voting system - cannot set attribute of join table

我正在尝试实施投票系统,以便我的应用程序的用户可以对其他用户对问题的回答进行投票。

这是一个在后端使用Express和Sequelize的Node应用程序,目前我正在使用SQLite数据库来简化测试。

这是我模型的相关部分:

// in user.js
User.associate = function (models) {
  // ...
  models.User.belongsToMany(models.Response, {
    through: models.Vote,
    as: 'Votes'
  })
}

// in response.js
Response.associate = function (models) {
  // ...
  models.Response.belongsToMany(models.User, {
    through: models.Vote,
    as: 'Votes'
  })
}

// in vote.js
module.exports = (sequelize, DataTypes) => {
  return sequelize.define('Vote', {
    upVote: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    }
  })
}

所以现在在我的votes.js控制器文件中,我可以尝试创建一个新的投票,给定一个UserId和一个ResponseId

const user = await User.findById(req.user.id)
const response = await Response.findById(req.params.responseId)

await response.addVote(user, {
  upVote: true
})

res.send(await response.getVotes())

问题是,尽管Votes addVote表已正确创建,并且尽管我向addVote函数传递了一个布尔值,该布尔值直接指示upVote属性应存储的值,但我只是收到一条错误消息,指出notNull Violation: Vote.upVote cannot be null

我之所以添加not null约束的唯一原因是因为没有它,我刚刚收到了对upVote具有空值的upVote

有谁知道为什么会这样?

我不知道为什么,但是用这个替换了response.addVote

const vote = await Vote.create({
  upVote: req.body.upVote,
  UserId: req.user.id,
  ResponseId: req.params.responseId
})

res.send(vote)

工作正常。 奇。 我一直遇到一些问题,Sequelize应该提供所谓的“魔术”自动生成的函数来提供关系,这些函数要么不可用,要么不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM