Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SequelizeJS - hasMany para hasMany na mesma tabela com uma tabela de junção


Como o que você está tentando fazer é uma auto associação, você só precisa chamar hasMany uma vez, o que criará uma tabela de junção
User.hasMany(User, { as: 'Contacts', joinTableName: 'userHasContacts'})

Que irá criar a tabela userHasContacts como:
CREATE TABLE IF NOT EXISTS `userHasContacts` (`userId` INTEGER , `ContactsId` INTEGER , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`userId`,`ContactsId`)) ENGINE=InnoDB;

Para encontrar usuários e seus contatos, você pode fazer:
User.find({ where: ..., include: [{model: User, as: 'Contacts'}]})