Sequelize.js中的'belongsTo'与'hasMany'

时间:2013-11-29 17:29:27

标签: sql node.js orm 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中创建了依赖的表?

1 个答案:

答案 0 :(得分:83)

当您执行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: '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;