belongsTo vs hasMany in Sequelize.js

Sqlnode.jsOrmsequelize.js

Sql Problem Overview


What's the difference between B.belongsTo(A) and 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');

if it in both cases creates the depended tables in Album?

Sql Solutions


Solution 1 - Sql

When you do Album.belongsTo(Artist) you are creating the relation enabling you to call album.getArtist().

Artist.hasMany(Album) links the association the other way, enabling you to call artist.getAlbums().

If you only did one of those two, e.g. if you only did Album.belongsTo(Artist) you would be able to retrieve the artist of an album, but not all albums of an artist.

Notice, however, that because of the foreign key given in your example, you are effectively creating two relations. The generated table looks like this:

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

If you only want one association, the foreignKey should be the same.

Example:

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

which generates:

CREATE TABLE IF NOT EXISTS `Albums` (`id` INTEGER NOT NULL auto_increment, `artist_id` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkhexView Question on Stackoverflow
Solution 1 - SqlJan Aagaard MeierView Answer on Stackoverflow