Je viens d'essayer d'exécuter votre code, et les lignes semblent créer bien:
CREATE TABLE IF NOT EXISTS `main_dashboard` (`title` VARCHAR(255), `id` INTEGER NOT NULL auto_increment , `idClient` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `main_client` (`id` INTEGER NOT NULL auto_increment, `clientId` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;
clientId
est ajouté à main_client
et idClient
est ajouté à main_dashboard
Il semble que vous ayez un peu confus ce que fait la méthode hasOne. Chaque fois que vous appelez hasOne, une association est créée, de sorte que votre code associe effectivement les deux tables deux fois. La méthode que vous recherchez est belongsTo
Si vous voulez que chaque client d'avoir un tableau de bord, le code serait la suivante:
MainClient.hasOne(MainDashboard, { foreignKey: 'clientId' })
MainDashboard.belongsTo(MainClient, { foreignKey: 'clientId' })
Cela crée un champ clientId sur la table main_dashboard, qui se rapporte à la champ id de la table main_client
En résumé belongsTo
ajoute la relation à la table sur laquelle vous appelez la méthode, hasOne
l'ajoute à la table indiquée comme argument.
D'accord, comprenez-moi. En fait, ce n'est qu'un exemple stupide. Ce que nous voulons, ce sont des contraintes de clés étrangères au niveau de la base de données, tout comme @dankohn. – swampcypress