1
我使用sequelize在我的節點應用程序中爲mySql數據庫模式建模。比方說,我有3個表:項目,用戶和角色。使用關聯和外鍵組合findAll
這是項目與用戶之間通過「Project_User」進行的「多對多」關聯,其中定義了用戶對項目的角色。
項目型號:
var Project = sequelize.define('Project', {
name:{type: DataTypes.STRING, unique: true}
},
classMethods: {
associate: function(models) {
Project.belongsToMany(models.User, { through: 'Project_User', as: 'users'});
}
}
// Methods...
);
用戶模型:
var User= sequelize.define('User', {
name:{type: DataTypes.STRING, unique: true}
},
classMethods: {
associate: function(models) {
User.belongsToMany(models.Project, { through: 'Project_User', as: 'projects'});
}
}
// Methods...
);
這裏是關聯表Project_User型號:
var Project_User = sequelize.define('Project_User', {
role:
{
type: DataTypes.INTEGER,
allowNull: false,
references: 'Role',
referencesKey: 'id'
}
},{
classMethods: {
associate: function(models) {
Project_User.belongsTo(models.Role, {foreignKey: 'role'});
}
}
});
現在,我想找到所有項目,與他們的用戶和他們的角色。所以我使用的findAll與「包含」這樣設置:
models.Projects.findAll({
include:[
{
model: models.User,
as:'users',
through: {attributes: ['role'], as: 'role'}
}]
}).then(function(result) {
// ...
});
這個偉大的工程,但我只有與用戶關聯的角色ID。我沒有能夠與角色表,以獲得其他屬性,如角色名鏈接這種「角色ID」 ......
這裏是JSON我有:
[
{
"id": 1,
"name": "Project name",
"users": [
{
"id": 1,
"name": "User name",
"role": {
"role": 1
}
}
]
}
]
但我會希望有這樣的事情:
[
{
"id": 1,
"name": "Project name",
"users": [
{
"id": 1,
"name": "User name",
"role": {
"id": 1,
"name": "Role name",
"description": "Some info...",
}
}
]
}
]
我試過很多事情要實現這種關聯,甚至連續包括但不成功。 findAll選項需要什麼才能獲得此JSON結果?
感謝
感謝您的答覆,但我已經嘗試,並沒有工作。事實上,我有一個像「未知列users.role」這樣的錯誤是有道理的,因爲角色不是來自用戶表的列,而是來自project_user。 – Raptack
如果您沒有用戶和角色之間的關係,那麼您唯一的選擇是對連接表(project_user)建模並將關係添加到角色。如果不定義關聯,則無法檢索完整模型數據(表格的一行)... – Aralizer
是的,這就是我所做的。您可以看到我的Projet_User模型,與角色(roleId作爲外鍵)的關係。但是我在我的** findAll()**中找不到正確的語法來顯示角色數據,而不僅僅是與項目關聯的每個用戶的外鍵roleId。 – Raptack