簡體   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