Qual è il modo corretto di eliminare a livello di codice una voce di campo specifica per un campo a più voci da un'entità specifica? (ovvero campi specifici ed entità specifiche, non tipi di campo o istanze e tipi di entità)
Ecco alcune possibilità che ho esaminato che non funzionano:
- Caricando l'entità con
entity_load()
, impostando la voce di campo su = null o = array (), quindi salvando confield_attach_update()
. È il più vicino che ho trovato ma lascia una voce di campo null zombie nel database che si presenta come una riga vuota sui moduli fino a quando il modulo non viene salvato ehook_field_is_empty()
può iniziare (hook_field_is_empty()
è configurato in modo tale che = null o = array () verrà contrassegnato come vuoto). - Caricare l'entità con
entity_load()
, annullare l'inserimento del campo per chiave, quindi salvare confield_attach_update()
. Questo sembra non fare nulla - sembra che Drupal interpreta la voce non essere lì come un segno per non modificarlo. (stranamente a volte ottengo anche i timeout di scadenza del tempo di query massimo quando provo questo approccio) field_attach_delete()
- è troppo schietto: uccide tutti i campi per l'entitàfield_purge_data()
- migliore, ma ancora troppo schietto: uccide tutte le voci del campo, non quelle specifiche
Quindi, per chiarire, ho un codice che trova (e carica) un'entità che ha un campo con più voci e trova una voce specifica su quel campo che deve essere rimossa. Voglio rimuovere quella voce completamente, senza toccare altre voci o altri campi sull'entità.