Sequelize:属性之间的命名冲突'播放列表'以及关联'播放列表'
Sequelize: Naming collision between attribute 'playlist' and association 'playlist'?
我正在使用node.js、Sequelize和MariaDB,遇到以下错误,我不知道如何解决?
错误:属性"播放列表"和关联之间的命名冲突型号playlist_entry上的"播放列表"。要解决此问题,请更改任一foreignKey或者在您的关联定义中
我的Javascript:
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时遇到了这个问题,这是因为column name
和reference name
是相同的
错误的实现
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;
};
这里的column name
(menteeId
)和alias name
(menteeId
)是相同的,要解决这个问题,您只需要更改alias name
正确实施
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
},
);
相关文章:
- Javascript::通过HTML5音频播放器播放列表播放多个音频文件
- Sequelize:属性之间的命名冲突'播放列表'以及关联'播放列表'
- 使用SoundJS播放列表
- 对Soundcloud自定义播放器播放列表的顺序进行排序
- Jplayer播放列表未定义
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- ajax/jQuery Youtube 播放列表推送
- 播放列表在IE和Chrome中无法正确显示
- 提交youtube播放列表id并从id加载播放列表
- 创建一个只有播放和暂停的Javascript音频播放列表
- 获取youtube播放列表的参考
- fityoutube在网站上嵌入播放列表
- BackboneJS如何在悬停时加载spotify播放列表
- 使用MediaSource扩展播放视频播放列表
- 为特定播放列表返回的快照长度不正确
- 需要帮助修复我的javascript"对于循环“;播放音频播放列表
- 从XML中获取播放列表项的新原型
- 使用JSON检索PHP数组,并使用javascript中的数组来填充播放列表
- php/html5播放列表使用glob()
- 自动播放音频播放列表SoundManager2 bar ui