drupal 7 – Eliminar mediante programación una entrada de un campo en una entidad

Pregunta:

¿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? (eso es campos específicos y entidades específicas, no tipos de campo o instancias y tipos de entidad)

Aquí hay algunas posibilidades que he analizado y que no funcionan:

  • Cargando la entidad con entity_load() , estableciendo la entrada del campo en = null o = array (), luego guardando con field_attach_update() . Es lo más cercano que he encontrado, pero deja una entrada de campo nulo zombie en la base de datos que aparece como una fila en blanco en los formularios hasta que el formulario se guarda y hook_field_is_empty() puede hook_field_is_empty() está configurado de tal manera que = nulo o = array () se marcará como vacío).
  • Cargar la entidad con entity_load() , desarmar la entrada de campo por clave, luego guardar con field_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 máximos de expiración del tiempo de consulta cuando intento este enfoque)
  • field_attach_delete() – esto es demasiado contundente: elimina todos los campos de la entidad
  • field_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 de la entidad.

Respuesta:

Si puede confiar en el módulo API de la entidad , debería poder usar un código similar al siguiente:

// Load some entity.
$entity = entity_load_single($entity_type, $id);

// Remove the field value.
unset($entity->field_FIELD_NAME[LANGUAGE_NONE][$index]);

// Reset the array to zero-based sequential keys.
$entity->field_FIELD_NAME[LANGUAGE_NONE] = array_values($entity->field_FIELD_NAME[LANGUAGE_NONE]);

// Save the entity.
entity_save($entity_type, $entity);

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım