gpt4 book ai didi

node.js - 在 Sequelize 中包含来自 findOne 查询的模型返回错误

转载 作者:行者123 更新时间:2023-12-03 22:27:45 32 4
gpt4 key购买 nike

我正在尝试使用 Sequelize 作为 ORM 通过它的 ID 从数据库中获取 field 。我已经在belongsTo 关联中设置了模型。因此,1 个 field 可以有 1 个电话号码和 1 个地址。我确实阅读了位于他们网站上的 Sequelize 文档,但没有找到解决此问题的方法。下面我为您提供了查询、错误消息和模型相互连接的方式。

这是查询:

function findById(id) {
return this.findOne({
where: { id: id },
include: [
{
model: models.Address,
as: "venue_address"
},
{
model: models.PhoneNumber,
as: "phone_number"
}
]
}).then((venue) => {
if (!venue) {
return utils.createError(404, `Venue with id ${id} does not exist`);
}
return venue;
});
}

Sequelize 返回以下错误:
TypeError: Cannot read property 'getTableName' of undefined
at Function._validateIncludedElement (/Users/kevin/Tabbs/API-Mysql/node_modules/sequelize/lib/model.js:465:30)
at options.include.options.include.map.include (/Users/kevin/Tabbs/API-Mysql/node_modules/sequelize/lib/model.js:395:37)
at Array.map (<anonymous>)
at Function._validateIncludedElements (/Users/kevin/Tabbs/API-Mysql/node_modules/sequelize/lib/model.js:390:39)
at Promise.try.then.then (/Users/kevin/Tabbs/API-Mysql/node_modules/sequelize/lib/model.js:1576:14)
at tryCatcher (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:693:18)
at Async._drainQueue (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues [as _onImmediate] (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:756:18)
at tryOnImmediate (timers.js:717:5)
at processImmediate [as _immediateCallback] (timers.js:697:5)
Unhandled rejection Error: Transaction cannot be rolled back because it has been finished with state: commit
at Transaction.rollback (/Users/kevin/Tabbs/API-Mysql/node_modules/sequelize/lib/transaction.js:85:35)
at models.Address.createAddress.then.catch (/Users/kevin/Tabbs/API-Mysql/server/routes/venue.js:57:13)
at tryCatcher (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/promise.js:689:18)
at Async._drainQueue (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues [as _onImmediate] (/Users/kevin/Tabbs/API-Mysql/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:756:18)
at tryOnImmediate (timers.js:717:5)
at processImmediate [as _immediateCallback] (timers.js:697:5)

模型关联如下:
models.Venue.belongsTo(models.PhoneNumber, {
as: "phone_number",
onDelete: "CASCADE",
foreignKey: { allowNull: false }
});
models.Venue.belongsTo(models.Address, {
as: "venue_address",
onDelete: "CASCADE",
foreignKey: { allowNull: false }
});

当我不包含任何内容时,这是我收到的回复:

enter image description here

感谢所有解决此问题的帮助!

最佳答案

我认为您的表正在无序初始化。如果你在这里看到我的例子:Example Index File 你会注意到我有一个特定顺序的模型数组,我循环遍历这些模型来初始化表。我认为您有一个在创建关联之前未初始化的外键依赖项,这就是您看到此错误的原因。

简短回答:您需要确保在依赖关系之前初始化外键依赖项。

关于node.js - 在 Sequelize 中包含来自 findOne 查询的模型返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080112/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com