为了账号安全,请及时绑定邮箱和手机立即绑定

Sequelize .set 错误,.set 不是函数

Sequelize .set 错误,.set 不是函数

冉冉说 2022-10-08 15:07:51
我正在尝试建立一个似乎正在工作的 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'

    }

});

您也可以以相同的方式覆盖复数形式。

您可以在此处阅读有关此内容的更多信息:续集命名策略


查看完整回答
反对 回复 2022-10-08
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号