Допустим, есть две таблицы, а именно Пользователь и Роль пользователя. Отношение между пользователем и пользовательской ролью один ко многим. Модель Sequelize для пользователя выглядит следующим образом -
const user = sequelize.define(
'user', {
id: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
userName: {
type: DataTypes.STRING(200),
allowNull: false,
field: 'username'
},
password: {
type: DataTypes.STRING(200),
allowNull: false,
field: 'password'
}
}, {
tableName: 'user'
}
);
Модель Sequelize для роли пользователя выглядит следующим образом -
const userRole = sequelize.define(
'userRole', {
id: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
userId: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'user_id'
},
password: {
type: DataTypes.STRING(200),
allowNull: false,
field: 'password'
}
}, {
tableName: 'userRole'
}
);
Ассоциация Sequelize определяется следующим образом -
user.hasMany(models.userRole, { foreignKey: 'user_id', as: 'roles' });
userRole.belongsTo(models.user, { foreignKey: 'user_id', as: 'user' });
Я хочу сгенерировать следующий запрос, используя
Sequelize -
SELECT *
FROM USER
INNER JOIN (SELECT user_role.user_id,
role
FROM user_role
INNER JOIN USER tu
ON tu.id = user_role.user_id
GROUP BY user_id
ORDER BY role) AS roles
ON USER.id = roles.user_id;
Я разрабатываю API, который будет использоваться интерфейсной сеткой для отображения информации о пользователе. Существует функция поиска по атрибуту роли в таблице пользовательских ролей. Если какая-либо роль определенного пользователя c совпадает, то я ожидаю запись пользователя со всеми ролями, которые связаны с этим пользователем.