Per le relazioni molti-a-molti (ad esempio Gruppi e utenti) le righe della tabella congiunta vengono automaticamente rimosse non appena viene eliminata una delle entità, come è stato impostato l'attributo di rimozione a cascata per la relazione. Quindi in pratica voglio eliminarlo SE SOLO È VUOTO. Quindi la soluzione deve garantire che non siano state eliminate relazioni (esattamente come il vincolo FK lo garantisce).Come disabilitare la cancellazione a cascata per le relazioni molti-a-molti?
È possibile non farlo per impostazione predefinita e generare un'eccezione sulla violazione del vincolo di chiave esterna?
PS: il controllo prima della cancellazione non è una soluzione poiché è soggetto a condizioni di gara.
PPS: definizioni di mappatura sono banali, per amor di completezza li inserisco qui (anche se non portano nulla di utile)
PPPS: onDelete: cascade
non è una soluzione sia: crea il corrispondente ON DELETE CASCADE
su il livello del database.
PPPPS: ON DELETE RESTRICT
NON PU BE ESSERE UTILIZZATO poiché doctrine rimuoverà tutti i riferimenti dalla tabella comune.
In ruoli:
manyToMany:
users:
targetEntity: UserAccount
mappedBy: roles
In utenti:
manyToMany:
roles:
targetEntity: Role
joinTable:
name: user_role
joinColumns:
user_id:
referencedColumnName: id
inverseJoinColumns:
role_id:
referencedColumnName: id
Suppongo che anche "ON DELETE RESTRICT" a livello di DB non sia un'opzione? –
Un'opzione per cosa? Non voglio cancellare nulla da un tavolo comune. – zerkms
Forse non ho capito la domanda iniziale, ma se vuoi lanciare un'eccezione quando provi ad eliminare le righe a cui fa riferimento la chiave esterna puoi impostare ON DELETE RESTRICT in DB. Ciò quindi getterebbe semplicemente un'eccezione da DB. –