javascript - 将数据添加到联接表
问题描述
我有两个模型,Contact 和 Message,它们具有 ContactMessage 的连接模型。
Contact.belongsToMany(models.Message, {
through: 'ContactMessage'
})
Message.belongsToMany(models.Contact, {
through: 'ContactMessage'
})
我正在从发送者向接收者发送消息,并且我想将消息 ID 和联系人 ID 添加到 joinTable 但它没有添加。
这就是我所拥有的:
sendSms(req, res) {
return Contact
.find( {
where: {
contact_phone: req.body.sender
}
}
)
.then(sender => {
if (sender) {
let users = [sender]
return Contact
.find({
where: {
contact_phone: req.body.reciever
}
}).then(reciever => {
users.push(reciever)
return users
})
} else {
console.log(`${sender} does not exist`)
}
}).then (users => {
if (!users) {
return res.status(404).send({
message: 'Users Not Found',
});
}
return Message.create({
sms
} = req.body)
.then(message => {
message.setContacts([users], {status: 'sent'})
return res.status(200).send(message)
})
.catch((error) => res.status(400).send(error));
})
.catch((error) => res.status(400).send(error));
}
请问我做错了什么?每当我尝试运行 api 时,我都会收到以下错误
Unhandled rejection SequelizeDatabaseError: operator does not exist: character varying = integer
at Query.formatError (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/sequelize/lib/dialects/postgres/query.js:363:16)
at query.catch.err (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/sequelize/lib/dialects/postgres/query.js:86:18)
at tryCatcher (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:690:18)
at _drainQueueStep (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:138:12)
at _drainQueue (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:131:9)
at Async._drainQueues (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:147:5)
at Immediate.Async.drainQueues (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:789:20)
at tryOnImmediate (timers.js:751:5)
at processImmediate [as _immediateCallback] (timers.js:722:5)
解决方案
我在迁移文件中犯了一个错误,因为ContactMessage
我使用 String 作为数据类型而不是 INTEGER。
现在看起来像这样:
return queryInterface.createTable('ContactMessages', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
contact_id: {
type: Sequelize.INTEGER,
references: {
model: 'Contacts',
key: 'id'
}
},
message_id: {
type: Sequelize.INTEGER,
references: {
model: 'Messages',
key: 'id'
}
},
status: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});