¿Cuál es la forma correcta de eliminar mediante programación una entrada de campo específica para un campo de múltiples entradas de una entidad específica? (son campos específicos y entidades específicas, no tipos de campos o instancias y tipos de entidades)
Aquí hay algunas posibilidades que he analizado que no funcionan:
- Cargando la entidad con
entity_load()
, estableciendo la entrada de campo en = nulo o = matriz (), luego guardando confield_attach_update()
. Es lo más cercano que he encontrado, pero deja una entrada de campo nulo zombie en la base de datos que se muestra como una fila en blanco en los formularios hasta que el formulario se guarda yhook_field_is_empty()
puede iniciarse (hook_field_is_empty()
está configurado de manera que = nulo o = matriz () marcará como vacio) - Cargando la entidad con
entity_load()
, desarmando la entrada de campo por clave, luego guardando confield_attach_update()
. Esto parece no hacer nada, parece que Drupal interpreta que la entrada no está allí como una señal para no modificarla. (curiosamente, a veces también obtengo tiempos de espera de tiempo de consulta máximos al intentar este enfoque) field_attach_delete()
- esto es demasiado contundente: mata todos los campos de la entidadfield_purge_data()
- mejor, pero aún demasiado contundente: elimina todas las entradas del campo, no entradas específicas
Entonces, para aclarar, tengo un código que encuentra (y carga) una entidad que tiene un campo que tiene múltiples entradas, y encuentra una entrada específica en ese campo que debe eliminarse. Quiero eliminar esa entrada por completo, sin tocar ninguna otra entrada o cualquier otro campo en la entidad.