web-dev-qa-db-fra.com

'appartient à' vs 'hasMany' dans Sequelize.js

Quelle est la différence entre B.belongsTo(A) et A.hasMany(B)

Artist = sequelize.define('Artist', {});
Album = sequelize.define('Albums', {});

Album.belongsTo(Artist, foreignKey: 'album_belongsl_artist');
Artist.hasMany(Album, foreignKey: 'artist_hasmany_albums');

s'il crée dans les deux cas les tables dépendantes dans Album?

51
khex

Lorsque vous faites Album.belongsTo(Artist) vous créez la relation vous permettant d'appeler album.getArtist(). Artist.hasMany(Album) relie l'association dans l'autre sens, vous permettant d'appeler artist.getAlbums(). Si vous n'avez fait que l'un de ces deux, par exemple si vous ne faisiez que Album.belongsTo(Artist) vous seriez en mesure de récupérer l'artiste d'un album, mais pas tous les albums d'un artiste.

Notez cependant qu'en raison de la clé étrangère donnée dans votre exemple, vous créez effectivement deux relations. Le tableau généré ressemble à ceci:

CREATE TABLE IF NOT EXISTS `Albums` (`id` INTEGER NOT NULL auto_increment , `album_belongsl_artist` INTEGER, `artist_hasmany_albums` INTEGER, PRIMARY KEY (`id`))

Si vous ne voulez qu'une seule association, la clé étrangère doit être la même. Exemple:

Album.belongsTo(Artist, {foreignKey: 'artist_id'});
Artist.hasMany(Album,{ foreignKey: 'album_id'});

qui génère:

CREATE TABLE IF NOT EXISTS `Albums` (`id` INTEGER NOT NULL auto_increment , `album_id` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;
87
Jan Aagaard Meier