web-dev-qa-db-ja.com

Sequelize.jsの「belongsTo」と「hasMany」

B.belongsTo(A)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');

どちらの場合でも、Albumに依存テーブルが作成されますか?

51
khex

Album.belongsTo(Artist)を実行すると、album.getArtist()を呼び出すことができるリレーションを作成します。 Artist.hasMany(Album)は関連付けを他の方法でリンクし、artist.getAlbums()を呼び出すことができます。これら2つのうち1つだけを実行した場合、たとえばAlbum.belongsTo(Artist)だけを実行した場合、アルバムのアーティストを取得することはできますが、アーティストのすべてのアルバムを取得することはできません。

ただし、例で示した外部キ​​ーのため、2つのリレーションを効果的に作成していることに注意してください。生成されたテーブルは次のようになります。

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

アソシエーションが1つだけ必要な場合、foreignKeyは同じでなければなりません。例:

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

生成するもの:

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