我正在为我的postgres数据库使用sequelize,并且有以下两个表:
它们先前使用 sequelize.define
这是M:N关系,所以我决定采用以下关联:
Artist.belongsToMany(Albums, { through: 'ArtistAlbums' }
Album.belongsToMany(Artist, { through: 'ArtistAlbums' }
这很好用,但是后面的ArtistArtAlbums表具有非常奇怪的列名:
“ ArtistArtistId”,“ AlbumAlbumId”是指艺术家(artistId)和专辑(albumId)的主键。但是,我只想在其中包含“ albumId”和“ artistId”,但无法弄清楚如何告诉续集做到这一点。我尝试了以下方法:
问题:我将在表中同时包含密钥和生成的密钥
unique: false
选项添加到它,这也不起作用。任何帮助表示赞赏!
编辑1:
我认为使用otherKey可以将一列设置为我想要的名称,而另一列则不能。
尝试这个:
Artist.belongsToMany(Album, {
through: 'ArtistAlbums',
unique: false,
foreignKey: 'artistId'
});
Album.belongsToMany(Artist, {
through: 'ArtistAlbums',
unique: false,
foreignKey: 'albumId'
});
请注意,我的代码和您的代码之间的唯一区别是foreignKey
定义。
上面的代码在我的postgreSQL DB中创建了以下结果。(我省略了一些数据):
CREATE TABLE public."ArtistAlbums"
(
"createdAt" timestamp with time zone NOT NULL,
"updatedAt" timestamp with time zone NOT NULL,
"artistId" integer NOT NULL,
"albumId" integer NOT NULL,
CONSTRAINT "ArtistAlbums_pkey" PRIMARY KEY ("artistId", "albumId"),
CONSTRAINT "ArtistAlbums_albumId_fkey" FOREIGN KEY ("albumId")
REFERENCES public."Album" (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT "ArtistAlbums_artistId_fkey" FOREIGN KEY ("artistId")
REFERENCES public."Artist" (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
要生成我使用的其他表:
const Artist = sequelize.define(
'Artist',
{
id: {
type: DataTypes.INTEGER,
primaryKey: true
}
},
{
freezeTableName: true
}
);
const Album = sequelize.define(
'Album',
{
id: {
type: DataTypes.INTEGER,
primaryKey: true
}
},
{
freezeTableName: true
}
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句