Vyhledávání na webu

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é)?