2016-05-09 32 views
2

我發現當我用Sequelize做一個查詢時,'Id'被添加到列名的末尾,但我不確定如何指示Sequelize不這樣做?如何防止Sequelize將'Id'添加到列名稱中?

我已經創建了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; 
}  

在 'playlist_entry' 表中的字段(在MariaDB的)如下:

  • ID:INT( 11)
  • 播放列表:INT(11)
  • 軌道:INT(11)

我執行查詢如下:

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' 

任何建議,將不勝感激。更改數據庫中的列名不是一個選項。

請注意,嘗試使用'eager includes'時出現此問題。

+0

值得一提的是,Sequelize增加'Id'的關係屬性,它是一個記錄和區分關係密鑰。我不確定你可以在沒有引入嚴重問題的情況下使用相同的名稱。 – tadman

+0

如果我能夠在'playlist_entry'表中將字段名稱更改爲'playlist_id',我應該做些什麼改變才能使其發揮作用? –

+0

通常最好遵守Sequelize的約定,除非你不能改變模式。如有必要,可以使用選項來調整默認值,但您無法做的一件事是使用相同名稱存儲屬性和列。 – tadman

回答

0

基於一些試驗中,解決方法是在「外鍵」屬性添加到的hasMany定義:

entities.Playlist.hasMany(entities.PlaylistEntry, { foreignKey: 'playlist' }); 
相關問題