Aditya Kresna Permana
Aditya Kresna Permana

Reputation: 12099

SequelizeAssociationError: You have used the alias in two separate associations. Aliased associations must have unique aliases

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

Answers (2)

Hamza Muazzam
Hamza Muazzam

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

Aditya Kresna Permana
Aditya Kresna Permana

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

Related Questions