Знайте, что это очень поздно, но надеюсь, что это будет кто-то еще в будущем -
Используя необработанный запрос и затем преобразовывая строку ролей в массив -
User.findOne({
where: {email},
attributes: [
'id', 'email',
[Sequelize.literal("(SELECT GROUP_CONCAT(roles) FROM user_project UP WHERE UP.user_id=user.id )"), "roles"],
]
}).then( (user) => {
if(!user)
return null;
user = JSON.parse(JSON.stringify(user));
if(!user.roles)
user.roles = [];
else
user.roles = user.roles.split(",");
return user;
});
Получение ролей без использования Raw -
User.findOne({
where: {email},
attributes: [
'id', 'email'
],
include: [
{
model: Db.user_project,
required: false,
attributes: ["user_id", "roles"]
}
]
}).then( (user) => {
if(!user)
return null;
user = JSON.parse(JSON.stringify(user));
if(!user.roles)
user.roles = [];
else
user.roles = user.roles.map(r => r.roles);
return user;
});