'belongsTo' 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');

si dans les deux cas, crée la dépendait tables Album?

36
demandé sur CuSS 2013-11-29 21:29:27

1 réponses

Lorsque vous faites Album.belongsTo(Artist) vous créez la relation vous permettant d'appeler album.getArtist(). Artist.hasMany(Album) relie l'association de l'autre façon, vous permettant d'appeler artist.getAlbums(). Si vous avez un de ces deux, par exemple, si vous n'avez Album.belongsTo(Artist) vous seriez en mesure de récupérer l'artiste de l'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. La table 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 assocation, la clé étrangère devrait être la même. Exemple:

Album.belongsTo(Artist, {foreignKey: 'album_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;
74
répondu Jan Aagaard Meier 2013-12-03 12:04:01