Javascript Sequelize.set错误,.set不是函数
我正在尝试设置一个belongsTo,并且有许多关联,这些关联似乎正在工作,但是当我运行.set时,我得到了错误Javascript Sequelize.set错误,.set不是函数,javascript,mysql,node.js,join,sequelize.js,Javascript,Mysql,Node.js,Join,Sequelize.js,我正在尝试设置一个belongsTo,并且有许多关联,这些关联似乎正在工作,但是当我运行.set时,我得到了错误fighterData.setUsers不是一个函数。方言是mySql。这是我的密码: Fighters.belongsTo(Users) Users.hasMany(Fighters); Users.sync() Fighters.sync() //creates the table if it doesn't exist const insertFighter = functi
fighterData.setUsers不是一个函数
。方言是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);
})
}
记录的错误是用户加入错误
。
有趣的是,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:
{ timestamps: true,
validate: {},
freezeTableName: false,
underscored: false,
paranoid: false,
rejectOnEmpty: false,
whereCollection: null,
schema: null,
schemaDelimiter: '',
defaultScope: {},
scopes: {},
indexes: [],
name: { plural: 'Fighters', singular: 'Fighter' },
omitNull: false,
sequelize:
Sequelize {
options: [Object],
config: [Object],
dialect: [MysqlDialect],
queryInterface: [QueryInterface],
models: [Object],
modelManager: [ModelManager],
connectionManager: [ConnectionManager],
importCache: {} },
hooks: {} },
_options:
{ isNewRecord: true,
_schema: null,
_schemaDelimiter: '',
attributes: undefined,
include: undefined,
raw: undefined,
silent: undefined },
isNewRecord: false }
这是将一架战斗机的信息输入数据库后返回的 问题在于模型的命名 Sequelize希望您的模型以单数形式命名(
User
而不是Users
),因此它会混淆它应该为您的关联命名生成的setter和getter方法
如果您尝试fighterData.setUser(userData)
而不是fighterData.setUsers(userData)
,它应该可以工作
如果您想改用设置用户
,则必须对模型进行调整,以告知Sequelize将用户
用作用户
的单数形式:
Users.init({
sessId: Sequelize.STRING
}, {
sequelize: sequelize,
name: {
singular: 'users'
}
});
你也可以用同样的方法改写复数形式
您可以在此处阅读更多信息:您在哪里定义“fighterData”?@OscarVelandia fighterData是从运行
Fighters.create()时在承诺链中返回的模型。
如果执行console.log of fighterData,您会得到什么?@OscarVelandia我对OP进行了编辑