Когда вы делаете 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`))
Если вам нужна только одна ассоциация, иностранный ключ должен быть одинаковым. Пример:
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;
У меня аналогичная проблема, и я просто интересно, как получить отношение обратно работать. Я набрал исполнителя и набрал на нем getAlbums, который отлично работает. Но затем, когда я использую один элемент альбома из результата, который я использовал, и выполняю '' getArtists'', он возвращает только '' null''. Как это можно решить? Потому что метод '' getArtist' обеспечивается секьюритизацией. – Bernhard
@Bernhard Вам, вероятно, нужно использовать опцию ['include'] (http://docs.sequelizejs.com/en/latest/api/model/?highlight=findAll) в вызове функции поиска, чтобы указать, какие отношения модели с нетерпением загружать. – doug65536
после часа траления документов, пытающихся разобраться, как это сделать, ваш код очень помог! получило приятную двухстороннюю ассоциацию 1: m. ура! –