I have some issue with getting full data from db. That are my models:
User
JavaScript
x
35
35
1
module.exports = function(sequelize, DataTypes) {
2
return sequelize.define('user', {
3
id: {
4
type: DataTypes.INTEGER(11),
5
allowNull: false,
6
primaryKey: true,
7
autoIncrement: true,
8
field: 'ID'
9
},
10
password: {
11
type: DataTypes.STRING(255),
12
allowNull: false,
13
field: 'password'
14
},
15
email: {
16
type: DataTypes.STRING(255),
17
allowNull: false,
18
unique: true,
19
field: 'email'
20
},
21
roleId: {
22
type: DataTypes.INTEGER(11),
23
allowNull: false,
24
references: {
25
model: 'role',
26
key: 'ID'
27
},
28
field: 'role_id'
29
}
30
}, {
31
timestamps: false,
32
tableName: 'user'
33
});
34
};
35
Role
JavaScript
1
30
30
1
module.exports = function(sequelize, DataTypes) {
2
return sequelize.define('role', {
3
id: {
4
type: DataTypes.INTEGER(11),
5
allowNull: false,
6
primaryKey: true,
7
autoIncrement: true,
8
field: 'ID'
9
},
10
name: {
11
type: DataTypes.STRING(255),
12
allowNull: false,
13
unique: true,
14
field: 'name'
15
},
16
description: {
17
type: DataTypes.STRING(255),
18
allowNull: false,
19
field: 'description'
20
},
21
permission: {
22
type: DataTypes.INTEGER(11),
23
allowNull: false,
24
field: 'permission'
25
}
26
}, {
27
timestamps: false,
28
tableName: 'role',
29
});};
30
I want to get object of one specific user including all role content. Somethink like
JavaScript
1
12
12
1
{
2
id: 4,
3
password: 'xxx',
4
email: 'adsads@saas.com',
5
role: {
6
id: 2,
7
name: 'admin'
8
description: 'ipsum ssaffa',
9
permission: 30
10
}
11
}
12
So I’m using:
JavaScript
1
2
1
User.findOne( { where: { id: req.userId }, include: [ Role ] } ).then( user =>{ });
2
but I get in the result err.message: “role is not associated to user”
And the simple question – what’s wrong ? 🙂
*to handle models I’m using sequelize-cli
Advertisement
Answer
You get this error because you didn’t add associate between the models
base on your json I see that each user only has one role, so you can either use belongsTo in role model or hasOne in user model
Should be something like this:
User.js
JavaScript
1
40
40
1
module.exports = function(sequelize, DataTypes) {
2
var user = sequelize.define('user', {
3
id: {
4
type: DataTypes.INTEGER(11),
5
allowNull: false,
6
primaryKey: true,
7
autoIncrement: true,
8
field: 'ID'
9
},
10
password: {
11
type: DataTypes.STRING(255),
12
allowNull: false,
13
field: 'password'
14
},
15
email: {
16
type: DataTypes.STRING(255),
17
allowNull: false,
18
unique: true,
19
field: 'email'
20
},
21
roleId: {
22
type: DataTypes.INTEGER(11),
23
allowNull: false,
24
references: {
25
model: 'role',
26
key: 'ID'
27
},
28
field: 'role_id'
29
}
30
}, {
31
timestamps: false,
32
tableName: 'user'
33
});
34
user.associate = function(models) {
35
user.hasOne(models.role, {foreignKey: 'id',sourceKey: 'roleId'});
36
37
}
38
return user;
39
};
40
Role.js
JavaScript
1
36
36
1
module.exports = function(sequelize, DataTypes) {
2
var role = sequelize.define('role', {
3
id: {
4
type: DataTypes.INTEGER(11),
5
allowNull: false,
6
primaryKey: true,
7
autoIncrement: true,
8
field: 'ID'
9
},
10
name: {
11
type: DataTypes.STRING(255),
12
allowNull: false,
13
unique: true,
14
field: 'name'
15
},
16
description: {
17
type: DataTypes.STRING(255),
18
allowNull: false,
19
field: 'description'
20
},
21
permission: {
22
type: DataTypes.INTEGER(11),
23
allowNull: false,
24
field: 'permission'
25
}
26
}, {
27
timestamps: false,
28
tableName: 'role',
29
});
30
role.associate = function(models) {
31
user.belongsTo(models.role, {foreignKey: 'id'});
32
33
}
34
return role;
35
};
36