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
に依存テーブルが作成されますか?
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;