Ответ 1
Когда вы выполняете Album.belongsTo(Artist)
, вы создаете отношение, позволяющее вам вызвать album.getArtist()
. Artist.hasMany(Album)
связывает связь другим способом, позволяя вам вызвать artist.getAlbums()
. Если вы сделали только один из этих двух, например. если вы только сделали Album.belongsTo(Artist)
, вы могли бы получить исполнителя альбома, но не все альбомы исполнителя.
Обратите внимание, что из-за внешнего ключа, указанного в вашем примере, вы эффективно создаете два отношения. Сгенерированная таблица выглядит так:
CREATE TABLE IF NOT EXISTS `Albums` (`id` INTEGER NOT NULL auto_increment , `album_belongsl_artist` INTEGER, `artist_hasmany_albums` INTEGER, PRIMARY KEY (`id`))
Если вам нужна только одна ассоциация, foreignKey должен быть одинаковым. Пример:
Album.belongsTo(Artist, {foreignKey: 'album_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;