#node.js #foreign-keys #sequelize.js
#node.js #внешние ключи #sequelize.js
Вопрос:
Описание проблемы
Я создал 2 таблицы, user
и role
. Одно из полей в user
том roleId
, что указывает на role
таблицу. Обе таблицы paranoid
равны true
. Если role.id
2 удалено [paranoid] ( deletedAt
имеет значение), я все равно могу вставить roleId: 2
в user
таблицу. [ОБНОВЛЕНИЕ]: даже models.update
может обновляться roleId: 2
тоже
Файлы
UserModel.js
class User extends Model {}
User.init({
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
}
}, {
sequelize,
tableName: 'user',
timestamps: true,
paranoid: true
})
export default User
RoleModel.js
class Role extends Model {}
Role.init({
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
}, {
sequelize,
tableName: 'role',
timestamps: true,
paranoid: true
})
export default Role
index.js
import RoleModel from './RoleModel'
import UserModel from './UserModel'
RoleModel.hasOne(UserModel, {
foreignKey: {
name: 'roleId',
fieldName: 'id',
allowNull: true
}
})
UserModel.belongsTo(RoleModel, {
as: 'role'
})
export {
RoleModel,
UserModel
}
Окружающая среда
- Версия продолжения: 6.3.5
- Node.js версия: v12.18.0
- Операционная система: macOS
- диалекты: mysql
Ответ №1:
Конечно, вы можете указать идентификатор записи с программным удалением, потому что эта запись все еще существует в БД, и вы можете получить пользователя с этой ролью, если вы укажете paranoid: false
при получении пользователя вместе с ролью:
const user = User.findById(userId, {
paranoid: false,
include: [Role]
}