sequelize.js - sequelize-typescript .$set nenastavuje Mnoho vztahů
Mám tyto dva modely:
@Table
export class Role extends Model {
@PrimaryKey
@Column({type: DataType.UUID, defaultValue: DataType.UUIDV4})
declare id: string
@Column
name: string
@Column
account_id: string
@CreatedAt
created_at: Date
@UpdatedAt
updated_at: Date
@HasMany(() => RolePermission, {foreignKey: 'role_id'})
permissions: RolePermission[]
}
@Table({tableName: 'role_permission'})
export class RolePermission extends Model {
@PrimaryKey
@Column({type: DataType.UUID, defaultValue: DataType.UUIDV4})
declare id: string
@Column
permission: string
@CreatedAt
created_at: Date
@UpdatedAt
updated_at: Date
@BelongsTo(() => Role, {foreignKey: 'role_id'})
role: Role
}
Snažím se aktualizovat roli a nastavit oprávnění role. Oprávnění je jen seznam řetězců. Model pro oprávnění neexistuje. Zkoušel jsem toto:
const form = {
name: 'role name here'
permissions: ['home.view']
}
const role = await Role.findByPk(id)
if(!role){
throw new Error("role not found")
}
await role.update({
name: form.name,
})
await role.$set('permissions', form.permissions.map(permission => RolePermission.build({permission})))
Nastavuje název role, ale neaktualizuje oprávnění role v databázi. Stará oprávnění z níže uvedeného kódu pro vytvoření jsou stále přítomna. Nepošlou se žádné chyby.
P.S. Vytvoření role s oprávněními funguje správně:
const form = {
name: 'role name here'
permissions: ['home.view']
}
const role = await Role.create({
account_id: request.account,
name: form.name,
permissions: form.permissions.map(permission => ({permission}))
}, {
include:[RolePermission]
})
Jedno řešení, které TAKŘKA funguje, je toto:
await RolePermission.bulkCreate(form.permissions.map(permission => ({permission, role_id: role.id})))
Ale k tomu potřebuji vymazat stará oprávnění a zdá se, že to nedokážu udělat:
Pokus 1:
await role.$set('permissions', []) // gives DEADLOCK SQL error
Pokus 2:
role.permissions = []
await role.save() // doesn't do anything
Jak je možné nastavit u modelu vztah HasMany s novými řádky (a odstranit ty staré)?