Reputation: 12099
On Sequelize v5 When I configuring the associations between models I got error like this.
/home/aditya/project/apisrv/node_modules/sequelize/lib/associations/base.js:106
throw new AssociationError(`You have used the alias ${options.as} in two separate associations. ` +
^
SequelizeAssociationError: You have used the alias originMenu in two separate associations. Aliased associations must have unique aliases.
at new Association (/home/aditya/project/apisrv/node_modules/sequelize/lib/associations/base.js:106:13)
at new BelongsTo (/home/aditya/project/apisrv/node_modules/sequelize/lib/associations/belongs-to.js:18:5)
at Function.<anonymous> (/home/aditya/project/apisrv/node_modules/sequelize/lib/associations/mixin.js:105:25)
at Function.Model.(anonymous function) [as belongsTo] (/home/aditya/project/apisrv/node_modules/sequelize-typescript/dist/model/model/model.js:116:28)
at associations.forEach.association (/home/aditya/project/apisrv/node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:54:52)
at Array.forEach (<anonymous>)
at models.forEach.model (/home/aditya/project/apisrv/node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:48:26)
at Array.forEach (<anonymous>)
at Sequelize.associateModels (/home/aditya/project/apisrv/node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:44:16)
at Sequelize.addModels (/home/aditya/project/apisrv/node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:36:14)
at Object.<anonymous> (/home/aditya/project/apisrv/src/repositories/pg/index.ts:44:15)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Module.m._compile (/home/aditya/project/apisrv/node_modules/ts-node/src/index.ts:473:23)
at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Object.require.extensions.(anonymous function) [as .ts] (/home/aditya/project/apisrv/node_modules/ts-node/src/index.ts:476:12)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)
at Module.require (internal/modules/cjs/loader.js:636:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/aditya/project/apisrv/src/controllers/UserController.ts:7:1)
at Module._compile (internal/modules/cjs/loader.js:688:30)
I've been checking multiple times that there are no other models using the same alias name as mentioned ('originMenu')
PS.
I'm using Sequelize v5 with typescript decorator
Upvotes: 11
Views: 16889
Reputation: 384
Worked for me. I was registering relation two times once in model creation and loaded the module into sequelize and second time while querying for fetch nested data. here is the simple code written in nodejs for better understanding.
let FavDrivers = sequelize.define('favourite_drivers', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
}, {
timestamps: true
});
FavDrivers.belongsTo(User, {
as: 'driver'
});
FavDrivers.belongsTo(User,
{
as: 'rider'
});
export default FavDrivers;
adding relation again will send you
SequelizeAssociationError: You have used the alias in two separate associations. Aliased associations must have unique aliases
// FavDrivers.belongsTo(User,
// {
// as: 'driver'
// });
let driver = await FavDrivers.findOne({
where: {
driverId: req.body.driverId,
riderId: req.body.userId,
},
include: [
{
model: User,
as: 'driver',
attributes:['name','mobileNumber','profileImage','loginId','id']
},
]
});
Upvotes: 1
Reputation: 12099
Turns out the problem is because I registering the model twice at initial setup on Sequelize. So removing duplicates model fix the core problems for me.
Upvotes: 23