Qual é a maneira correta de excluir programaticamente uma entrada de campo específica para um campo com várias entradas de uma entidade específica? (são campos e entidades específicos, não tipos de campo ou instâncias e tipos de entidade)
Aqui estão algumas possibilidades que examinei e que não funcionam:
- Carregando a entidade com
entity_load()
, definindo a entrada do campo como = null ou = array () e salvando comfield_attach_update()
. É o mais próximo que eu encontrei, mas deixa uma entrada de campo nulo zumbi no banco de dados que aparece como uma linha em branco nos formulários até que o formulário seja salvo ehook_field_is_empty()
possa entrar em ação (hook_field_is_empty()
é configurado de forma que = null ou = array () sinalize vazio). - Carregando a entidade
entity_load()
, desmarcando a entrada do campo por chave e salvando comfield_attach_update()
. Isso parece não fazer nada - parece que o Drupal interpreta a entrada não estando lá como um sinal para não modificá-la. (estranhamente, às vezes também recebo o tempo limite de expiração do tempo máximo de consulta ao tentar esta abordagem) field_attach_delete()
- isso é muito franco: mata todos os campos da entidadefield_purge_data()
- melhor, mas ainda muito franco: mata todas as entradas do campo, não entradas específicas
Então, para esclarecer, eu tenho um código que encontra (e carrega) uma entidade que possui um campo que possui várias entradas e que encontra uma entrada específica nesse campo que precisa ser removida. Desejo remover completamente essa entrada, sem tocar em nenhuma outra entrada ou em qualquer outro campo da entidade.