Javascript Sequelize:属性和#x27;播放列表';和协会';播放列表';?
我正在使用node.js、Sequelize和MariaDB,我遇到了以下错误,我不知道如何解决 错误:“播放列表”属性和关联之间的命名冲突 型号播放列表项上的“播放列表”。要解决此问题,请更改foreignKey或 或者按照你的协会定义 我的Javascript:Javascript Sequelize:属性和#x27;播放列表';和协会';播放列表';?,javascript,node.js,sequelize.js,mariadb,Javascript,Node.js,Sequelize.js,Mariadb,我正在使用node.js、Sequelize和MariaDB,我遇到了以下错误,我不知道如何解决 错误:“播放列表”属性和关联之间的命名冲突 型号播放列表项上的“播放列表”。要解决此问题,请更改foreignKey或 或者按照你的协会定义 我的Javascript: Entities = function (settings, context) { sequelize = context.sequelize; var entities = { Playlis
Entities = function (settings, context) {
sequelize = context.sequelize;
var entities = {
Playlist: this.sequelize.define('playlist', {
name: Sequelize.STRING,
description: Sequelize.STRING
}),
PlaylistEntry: this.sequelize.define('playlist_entry', {
playlist: Sequelize.INTEGER
//track: Sequelize.INTEGER
})
};
entities.PlaylistEntry.belongsTo(
entities.Playlist,
{ foreignKey: { name: 'fk_playlist' }});
return entities;
}
我的桌子:
CREATE TABLE `playlist` (
`id` int(11) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`description` varchar(255) DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT NULL,
`updatedAt` timestamp NULL DEFAULT NULL,
`external_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `playlist_entry` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`playlist` int(11) unsigned DEFAULT NULL,
`track` int(11) unsigned DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT NULL,
`updatedat` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `track_idx` (`track`),
KEY `playlist_idx` (`playlist`),
CONSTRAINT `fk_playlist` FOREIGN KEY (`playlist`) REFERENCES `playlist` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
我在玩Sequelize时遇到了这个问题,这是因为
列名
和引用名
是相同的
执行错误
module.exports = (sequelize, DataTypes) => {
const session = sequelize.define('session', {
menteeId: DataTypes.INTEGER,
}, {});
session.associate = (models) => {
session.belongsTo(models.user, {
foreignKey: 'menteeId',
as: 'menteeId',
onDelete: 'CASCADE',
});
};
return session;
};
module.exports = (sequelize, DataTypes) => {
const session = sequelize.define('session', {
menteeId: DataTypes.INTEGER,
}, {});
session.associate = (models) => {
session.belongsTo(models.user, {
foreignKey: 'menteeId',
as: 'MenteeId', // Changes applied here
onDelete: 'CASCADE',
});
};
return session;
};
这里的列名
(menteeId
)和别名
(menteeId
)是相同的,要解决这个问题,您只需要更改别名
正确实施
module.exports = (sequelize, DataTypes) => {
const session = sequelize.define('session', {
menteeId: DataTypes.INTEGER,
}, {});
session.associate = (models) => {
session.belongsTo(models.user, {
foreignKey: 'menteeId',
as: 'menteeId',
onDelete: 'CASCADE',
});
};
return session;
};
module.exports = (sequelize, DataTypes) => {
const session = sequelize.define('session', {
menteeId: DataTypes.INTEGER,
}, {});
session.associate = (models) => {
session.belongsTo(models.user, {
foreignKey: 'menteeId',
as: 'MenteeId', // Changes applied here
onDelete: 'CASCADE',
});
};
return session;
};
在你的情况下,你可以这样做
entities.PlaylistEntry.belongsTo(
entities.Playlist,
{
foreignKey: { name: 'fk_playlist' },
as: 'PlayListAlias', // Appropriate name
},
);
可以使用键“as”为关系指定别名。谢谢,这很有帮助:
entities.playlentry.belongsTo(entities.Playlist,{as:'Playlist',foreignKey:{name:'fk_Playlist'})代码>。但是如果您使用相同的名称,不是吗?是的,但是Sequelize不会抱怨冲突。也许是案件的问题?你能推荐一个替代的命名法吗?不,如果它有效的话,我想它是好的。我从来没有遇到过这样的问题,尽管我记得文件,因此提出了建议。