Wie kann ein bestimmter Feldeintrag für ein Feld mit mehreren Einträgen programmgesteuert aus einer bestimmten Entität gelöscht werden? (Das sind bestimmte Felder und bestimmte Entitäten, keine Feldtypen oder Instanzen und Entitätstypen.)
Hier sind einige Möglichkeiten, die ich untersucht habe und die nicht funktionieren:
- Laden Sie die Entität mit
entity_load()
, setzen Sie den Feldeintrag auf = null oder = array () und speichern Sie dann mitfield_attach_update()
. Es ist das nächste, das ich gefunden habe, aber es hinterlässt einen Zombie-Null-Feldeintrag in der Datenbank, der in Formularen als leere Zeile angezeigt wird, bis das Formular gespeichert wird undhook_field_is_empty()
aktiviert werden kann (hook_field_is_empty()
ist so konfiguriert, dass = null oder = array () markiert wird als leer). - Laden der Entität mit
entity_load()
, Deaktivieren des Feldeintrags mit der Taste und Speichern mitfield_attach_update()
. Dies scheint nichts zu bewirken - es scheint, dass Drupal den Eintrag, der nicht vorhanden ist, als Zeichen interpretiert, um ihn nicht zu ändern. (Seltsamerweise bekomme ich manchmal auch maximale Zeitüberschreitungen beim Abfragen, wenn ich diesen Ansatz versuche.) field_attach_delete()
- das ist viel zu stumpf: es löscht alle Felder für die Entitätfield_purge_data()
- Besser, aber immer noch zu stumpf: Es werden alle Einträge des Feldes gelöscht, keine spezifischen Einträge
Zur Verdeutlichung habe ich Code, der eine Entität mit einem Feld mit mehreren Einträgen findet (und lädt) und in diesem Feld einen bestimmten Eintrag findet, der entfernt werden muss. Ich möchte diesen Eintrag vollständig entfernen, ohne andere Einträge oder andere Felder in der Entität zu berühren.