Javascript 如何防止续集添加';Id';要使用列名吗?

Javascript 如何防止续集添加';Id';要使用列名吗?,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,我发现当我使用Sequelize“Id”进行查询时,会将其添加到我的列名末尾,但我不确定如何指示Sequelize不要这样做 我为Sequelize创建了一个实体数据模型,如下所示: function initializeDataModel(sequelize) { var dataModel = { }; dataModel.Playlist = this.sequelize.define('playlist', { name: Sequelize.S

我发现当我使用Sequelize“Id”进行查询时,会将其添加到我的列名末尾,但我不确定如何指示Sequelize不要这样做

我为Sequelize创建了一个实体数据模型,如下所示:

function initializeDataModel(sequelize) {
    var dataModel = { };    

    dataModel.Playlist = this.sequelize.define('playlist', {
        name: Sequelize.STRING,
    }); 

    dataModel.PlaylistEntry = this.sequelize.define('playlist_entry', {
        playlist: {
            name: 'playlist',
            type: Sequelize.INTEGER,
            references: {
                // This is a reference to another model
                model: dataModel.Playlist,

                // This is the column name of the referenced model
                key: 'id'

                // This declares when to check the foreign key constraint. PostgreSQL only.
                //deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE 
            }               
        },
        track: Sequelize.INTEGER
    });                

    dataModel.PlaylistEntry.belongsTo(
         dataModel.Playlist,
         { as: 'Playlist', foreignKey: { name: 'playlist' }});

    dataModel.Playlist.hasMany(dataModel.PlaylistEntry);

    return dataModel;
}    
    eagerIncludes.push(this.dataModel.PlaylistEntry);

    this.dataModel.Playlist.find({
       where: { id: playlistId },
       limit: limit,
       offset: offset,
       include: eagerIncludes                 
    }).then(function (results) {
        callback(results, options, undefined);
    }).catch(function (error) {
        callback(undefined, options, error);
    });
“playlist_entry”(在MariaDB中)表中的字段如下所示:

function initializeDataModel(sequelize) {
    var dataModel = { };    

    dataModel.Playlist = this.sequelize.define('playlist', {
        name: Sequelize.STRING,
    }); 

    dataModel.PlaylistEntry = this.sequelize.define('playlist_entry', {
        playlist: {
            name: 'playlist',
            type: Sequelize.INTEGER,
            references: {
                // This is a reference to another model
                model: dataModel.Playlist,

                // This is the column name of the referenced model
                key: 'id'

                // This declares when to check the foreign key constraint. PostgreSQL only.
                //deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE 
            }               
        },
        track: Sequelize.INTEGER
    });                

    dataModel.PlaylistEntry.belongsTo(
         dataModel.Playlist,
         { as: 'Playlist', foreignKey: { name: 'playlist' }});

    dataModel.Playlist.hasMany(dataModel.PlaylistEntry);

    return dataModel;
}    
    eagerIncludes.push(this.dataModel.PlaylistEntry);

    this.dataModel.Playlist.find({
       where: { id: playlistId },
       limit: limit,
       offset: offset,
       include: eagerIncludes                 
    }).then(function (results) {
        callback(results, options, undefined);
    }).catch(function (error) {
        callback(undefined, options, error);
    });
  • id:INT(11)
  • 播放列表:INT(11)
  • 曲目:国际(11)
我正在执行的查询如下:

function initializeDataModel(sequelize) {
    var dataModel = { };    

    dataModel.Playlist = this.sequelize.define('playlist', {
        name: Sequelize.STRING,
    }); 

    dataModel.PlaylistEntry = this.sequelize.define('playlist_entry', {
        playlist: {
            name: 'playlist',
            type: Sequelize.INTEGER,
            references: {
                // This is a reference to another model
                model: dataModel.Playlist,

                // This is the column name of the referenced model
                key: 'id'

                // This declares when to check the foreign key constraint. PostgreSQL only.
                //deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE 
            }               
        },
        track: Sequelize.INTEGER
    });                

    dataModel.PlaylistEntry.belongsTo(
         dataModel.Playlist,
         { as: 'Playlist', foreignKey: { name: 'playlist' }});

    dataModel.Playlist.hasMany(dataModel.PlaylistEntry);

    return dataModel;
}    
    eagerIncludes.push(this.dataModel.PlaylistEntry);

    this.dataModel.Playlist.find({
       where: { id: playlistId },
       limit: limit,
       offset: offset,
       include: eagerIncludes                 
    }).then(function (results) {
        callback(results, options, undefined);
    }).catch(function (error) {
        callback(undefined, options, error);
    });
这导致:

ER_BAD_FIELD_ERROR: Unknown column 'playlist_entries.playlistId' in 'field list'
如有任何建议,将不胜感激。更改数据库中的列名不是一个选项


注意,尝试使用“”时会出现此问题。

根据一些实验,修复方法是将“foreignKey”属性添加到hasMany定义中:

entities.Playlist.hasMany(entities.PlaylistEntry, { foreignKey: 'playlist' });

值得一提的是,Sequelize添加了
Id
,以区分作为记录的关系属性和关系键。我不确定您是否可以使用相同的名称而不引起严重问题。如果我能够将“playlist\u id”字段名更改为“playlist\u entry”表中的“playlist\u id”,我应该进行哪些更改才能使其正常工作?通常,最好遵守Sequelize规定的约定,除非您无法更改架构。如果需要,可以使用选项调整默认值,但有一件事您不能做,那就是让属性和它存储的列使用相同的名称。我正在使用一个现有的数据库,并且有一些约定,例如字段和表名称都是小写的,并且是用下划线分隔的单词。我不确定我是否理解您所说的“您不能做的一件事是使用相同的名称存储属性和列”。这在Sequelize中是如何表现的?有什么例子吗?我的意思是不能有一个名为
x
的列和一个名为
x
的属性,因为这两个属性会发生冲突。这就是为什么它通常是
xId
x_id
,这取决于您是否愿意区分它们的键和任何已实例化的相关记录。