Подтвердить что ты не робот

"принадлежит" против "hasMany" в Sequelize.js

В чем разница между 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?

4b9b3361

Ответ 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;