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

我正在尝试建立一个似乎正在工作的 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 exist


const 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:


这是从将一名战斗机的信息输入数据库中返回的。


冉冉说
浏览 133回答 1
1回答

繁星点点滴滴

问题在于模型的命名。Sequelize 期望您的模型以单数形式命名(User而不是Users),因此它与应该为您的关联生成的 setter 和 getter 方法命名混淆。如果您尝试fighterData.setUser(userData)代替fighterData.setUsers(userData),它应该可以工作。如果您想setUsers改用,则必须对模型进行调整以告诉 SequelizeUsers用作 的单数形式User:Users.init({    sessId: Sequelize.STRING }, {    sequelize: sequelize,    name: {        singular: 'users'    }});您也可以以相同的方式覆盖复数形式。您可以在此处阅读有关此内容的更多信息:续集命名策略
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript