Я использую диалект mysql
с sequelize-v6
У меня две таблицы
class Role extends Model {}
Role.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNull: false
}
},
{
...
});
и
class Employee extends Model {}
Employee.init({
id: {
type: DataTypes.STRING,
primaryKey: true,
},
...
},
{
...
});
, и я подключаю их, используя :
class EmployeeRole extends Model {
}
EmployeeRole.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
targetId: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: ''
}
},
{
...
});
Отношения следующие:
RoleModel.belongsToMany(EmployeeModel, {
as: 'Employees',
through: EmployeeRoleModel,
foreignKey: {
name: 'roleId', allowNull: false
},
otherKey: {
name: 'employeeId',
allowNull: false
}
});
EmployeeModel.belongsToMany(RoleModel, {
as: 'Roles',
through: EmployeeRoleModel,
foreignKey: {
name: 'employeeId',
allowNull: false
},
otherKey: {
name: 'roleId',
allowNull: false
}
});
Проблема:
Сотрудник может иметь такой же roleId , следовательно тот же employeeId , но с другим resourceId , и всякий раз, когда я пытаюсь добавить другую сущность, она перезаписывает предыдущую
, например:
{ roleId: 2, employeeId: '#33', resourceId: 'profiles' }
{ roleId: 2, employeeId: '#33', resourceId: 'screenshots' }
Ожидаемый вывод, они оба добавляются в базу данных
Фактический вывод, добавлен только последний, и он перезаписывает предыдущий
для реализации logi c:
const employeeRole = await RoleModel.findByPk(3);
const promise = await employee.addRole(employeeRole, {through: { targetId: 'whatever' }})
.then(role=>role)
.catch(_=>null);
// If there is a previous one it will overwrite
# Edit
Я потратил много времени на поиск, но не получил результата.
Я также видел эту проблему на github, которая вроде как,
Многие-ко-многим "через" ...