sql-Sequelize.js中的“ belongsTo”与“ hasMany”

AlbumA.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中创建从属表?

khex asked 2020-01-14T02:27:12Z
1个解决方案
89 votes

当您执行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: '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;
Jan Aagaard Meier answered 2020-01-14T02:27:44Z
translate from https://stackoverflow.com:/questions/20290815/belongsto-vs-hasmany-in-sequelize-js