我正在尝试建立一个似乎正在工作的 belongsTo 和 hasMany 关联,但是当我运行 .set 时出现错误fighterData.setUsers is not a function。方言是mySql。这是我的代码:Fighters.belongsTo(Users)Users.hasMany(Fighters);Users.sync()Fighters.sync()//creates the table if it doesn't existconst insertFighter = function(obj, sessId) { return Fighters.create(obj, {returning: true}).then((fighterData) => { //console.log('inserted a fighter \n', fighterData); return Users.findOne({ where: { id: sessId } }).then((userData) => { //console.log('fighterData in findOne promise \n', fighterData) return fighterData.setUsers(userData) }).then((success)=> { console.log('user fighter join success') return }).catch((err)=> { console.log('user fighter join error \n', err) return }) }).catch((err)=> { console.log('error inserting fighter \n', err); })}记录的错误是user fighter join error. 有趣的是,userData.setFighters(fighterData)工作成功,但这不是我需要的编辑这就是 fighterData 是什么:fighterData in findOne promise Fighters { dataValues: { id: 7, name: 'Gilbert Burns', image: 'https://www.sherdog.com/image_crop/200/300/_images/fighter/20140806063215_IMG_8432.JPG', next_opponent: 'Kamaru Usman', next_fight: 'July 11, 2020 ', style: 'mma', updatedAt: 2020-06-17T06:00:40.368Z, createdAt: 2020-06-17T06:00:40.368Z }, _previousDataValues: { name: 'Gilbert Burns', image: 'https://www.sherdog.com/image_crop/200/300/_images/fighter/20140806063215_IMG_8432.JPG', next_opponent: 'Kamaru Usman', next_fight: 'July 11, 2020 ', style: 'mma', id: 7, createdAt: 2020-06-17T06:00:40.368Z, updatedAt: 2020-06-17T06:00:40.368Z, UserId: undefined }, _changed: { name: false, image: false, next_opponent: false, next_fight: false, style: false, id: false, createdAt: false, updatedAt: false, UserId: false }, _modelOptions:这是从将一名战斗机的信息输入数据库中返回的。
1 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
问题在于模型的命名。
Sequelize 期望您的模型以单数形式命名(User而不是Users),因此它与应该为您的关联生成的 setter 和 getter 方法命名混淆。
如果您尝试fighterData.setUser(userData)代替fighterData.setUsers(userData),它应该可以工作。
如果您想setUsers改用,则必须对模型进行调整以告诉 SequelizeUsers用作 的单数形式User:
Users.init({
sessId: Sequelize.STRING
}, {
sequelize: sequelize,
name: {
singular: 'users'
}
});
您也可以以相同的方式覆盖复数形式。
您可以在此处阅读有关此内容的更多信息:续集命名策略
添加回答
举报
0/150
提交
取消
