Reputation: 1534
I am trying to get a venue by it's ID from the database using Sequelize as an ORM. I've set up the models in a belongsTo association. So 1 venue can have 1 phone number as well as 1 address. I did read the documentation of Sequelize located on their website but without finding a fix for this issue. Below I've provided you with the Query, the error message and the way that the models are connected with each other.
This is the query:
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 is returning the following error:
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)
The models are associated like this:
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 }
});
This is what I am receiving back when I do not include anything:
Appreciate all the help fixing this issue!
Upvotes: 0
Views: 2546
Reputation: 1964
I think your tables are being initialized out of order. If you see my example here: Example Index File you will notice that I have an array of models in a specific order which I loop through to initialize the tables. I think you have a foreign key dependency that is not being initialized before the association is being created and this is why you are seeing this error.
Short answer: You need to make sure foreign key dependencies are initialized before the dependent relation.
Upvotes: 1