2015-06-20 101 views
1

我有兩個表,用戶和MControllers。他們通過所謂的歷史另一個表中的許多一對多的關係,就像定義:我做了類似的關聯Sequelize.js急切加載多對多表

var History = sequelize.define("History", { 
id: { 
    type: DataTypes.INTEGER, 
    primaryKey: true, 
    autoIncrement: true 
}, 
message: { 
    type : DataTypes.STRING, 
    allowNull : false 
} 
}, { 
timestamps: true, 
updatedAt: false, 
classMethods: { 
    associate: function(models) { 
    } 
} 
}); 

MController.belongsToMany(User, {through: History, onDelete: 'cascade' }); 
User.belongsToMany(MController, {through: History, onDelete: 'cascade' }); 

現在,我需要查詢歷史記錄表的用戶表格急切加載。事情是這樣的:

historyEntity.findAll({ 
     where : { 
      MControllerId : mcontrollerId 
     }, 
     include : { 
      model : this.User 
     } 
    }); 

,但我發現了以下錯誤:

[Error: User is not associated to History!] 

如果我檢查了歷史模型,它真的沒有任何關聯。 如何使此查詢成爲可能?

編輯: 我試圖查詢用戶表,急於加載歷史表,沒有成功。它告訴我,用戶不與歷史記錄相關聯,其實因爲我已檢查了用戶模式,是不正確的,它說:

{ History: [Object], 
    UserMController: [Object], 
    OauthAccessTokensUsers: [Object], 
    OauthRefreshTokensUsers: [Object] }, 

回答

0

看着自己的協會,爲什麼你有models.User和在其他地方只User?檢查是否解決了一些問題。

如果沒有,我用

History.hasOne(MController); History.hasOne(User);

+0

我修改了代碼的問題Activator秒。在所有使用models.User的地方。除此之外,像你說的那樣,放置hasOne將在用戶表中添加一個fk。不是我想要的,因爲歷史是一個多對多的表格。或者我想錯了? –

+0

是的,正如你在解釋它,歷史正在作爲用戶和MControllers之間的連接表,你能解釋你想達到什麼嗎?因爲與這些協會歷史不是一個多對多的表 –

+0

也許我做錯了什麼。我有一個用戶表和一個MController表。它們與另一個名爲UserMController的連接表相關。所有工作正常,但現在我需要另一個表來告訴哪個用戶激活了一些MController。所以我想到了一個歷史記錄表,它有兩個fk,UserId和MControllerId,以及我想存儲的信息。所以我試圖做這些協會,但沒有成功。 –

1

討論您的需求@Renan後一直圍繞這項工作,我建議你到User模型兩次關聯到MController,一個爲User,一個作爲Activator

// normal users 
MController.belongsToMany(User, {through: 'MControllerUsers', onDelete: 'cascade' }); 
User.belongsToMany(MController, {through: 'MControllerUsers', onDelete: 'cascade' }); 

// activator users 
MController.belongsToMany(User, {through: 'MControllerActivators', onDelete: 'cascade', as: 'Activator' }); 
User.belongsToMany(MController, {through: 'MControllerActivators', onDelete: 'cascade', as: 'Activator' }); 

這種方式,您可以有相同的模型UserMController並具有兩個不同的角色,讓你有許多User秒和每MController